Comments (11)
You are da 💣 !
from qs.
true! I like arrayFormat
@nlf thoughts?
from qs.
I'm a +1 for arrayFormat
from qs.
Trouble with this is that if you are dealing with a PHP or Rails backend, it expects a[]=b&a[]=c
which is rather what I was hoping for when I saw the omit indices option!
from qs.
The presence of an index is an issue here as well. What about omitting indices (but keeping the brackets) when the option indices
is set to 'empty'
?
from qs.
I know we dont like breaking changes, but I wonder if the ideal solution takes account of the fact that there are 3 array formats in use:
Rails, PHP, jQuery: a[]=b&a[]=c
Java, Go, c#: a=b&a=c
Express: a[0]=b&a[1]=b
something along the lines of:
qs.stringify({ a: ['b', 'c'] }, { format: 'brackets' }); //a[]=b&a[]=c
qs.stringify({ a: ['b', 'c'] }, { format: 'repeat' }); //a=b&a=c
qs.stringify({ a: ['b', 'c'] }, { format: 'indices' }); //a[0]=b&a[1]=c
from qs.
from qs.
I think that's a good compromise
from qs.
Thanks, @Dakuan, for making it clear that the three array formats are all used.
I'm seeing four proposals:
- Don't remove brackets when
indices
isfalse
- #65 - New option
brackets
in addition toindices
- #65 (comment) - New option
format
to replacebrackets
- #46 (comment) - New value
empty
forindices
- #46 (comment)
The first breaks backwards compatibility and only supports two types, so that doesn't have my preference. Two seems more verbose (two variables to set for one issue: how to serialize arrays). Three would include deprecation of the indices
parameter in favour of format
but is otherwise very clear. Four would be easiest, but it might be slightly confusing to accept both booleans and strings as values.
I'd like to propose a number five
5. Use string values for indices
(like brackets
, repeat
, indices
), while allowing true
and false
to remain backward-compatible (optionally deprecating them at the next major release).
from qs.
@wvengen I think thats a bit confusing, the word indices looses its meaning - {indices: 'brackets'}
wouldn't really explain whats going on if you were coming at the code cold. How about:
var q = {
a: ['b', 'c']
};
// don't break current default
qs.stringify(q) //a[0]=b&a[1]=c
// deprecate indices option, but just warn for now to not break
qs.stringify(q, {indices: false} // //a=b&a=c DEPRECATION WARNING, please use {format: 'repeat'}
// new format option, its semantic and can be expanded if the next hot framework
// takes a new approach
qs.stringify(q, { format: 'brackets' }); //a[]=b&a[]=c
qs.stringify(q, { format: 'repeat' }); //a=b&a=c
qs.stringify(q, { format: 'indices' }); //a[0]=b&a[1]=c
from qs.
@Dakuan Hmm I agree :) Then, reading your example, I'm wondering if 'arrayFormat' or 'arrays' would be clearer? These options are for the whole stringification, and this only is about arrays.
from qs.
Related Issues (20)
- Keeping nesting with custom decoder ? HOT 1
- qs.parse decoder option doesn't work on IOS web view environment HOT 1
- Unable to parse back a stringified object when too nested HOT 3
- `stringify` with `arrayFormat: 'comma'` does not encode commas in strings. HOT 13
- [spam]
- ESM & CJS - Built HOT 9
- Stringify null values HOT 9
- None. HOT 1
- Serialization for `Date` is not working when using `filter` option. HOT 3
- Issue using qs while using Express@5 HOT 7
- qs.stringify(json) and qs.parse(json) Results are inconsistent with expectations HOT 4
- Parsing the stringify result would lead to a different object HOT 1
- qs parse is not letting app load on production when imported from index.tsx HOT 1
- Feature request: export another endpoint that doesn't depend on function-bind and possibly other polyfills HOT 10
- Does not work in NextJS edge middleware HOT 3
- Stringify method with format: "RFC1738" does not encode parentheses -> ( ) HOT 3
- I'm appreciate with this library, however my new project use python. Are there any same packages in Python? HOT 1
- How can you keep the square brackets when using arrayFormat: comma HOT 4
- Add required key and type checking HOT 2
- qs.parse return different while the query is in different position HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qs.