Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Default arrayFormat causes arrays of length 1 to be serialised the same as a string #206

Open
hedgepigdaniel opened this issue Sep 3, 2019 · 4 comments

Comments

@hedgepigdaniel
Copy link

The default arrayFormat value of none is problematic because arrays of length 1 are serialised to the same format as if the value was the string contained within the array.

For example:

qs.parse(qs.stringify({a: 'val'})); // {a: 'val'}
qs.parse(qs.stringify({a: ['val']})); // {a: 'val'} WRONG/UNEXPECTED
qs.parse(qs.stringify({a: ['val', 'val2']})); // {a: ['val', 'val2']}

Perhaps the default arrayFormat should be changed to bracket or index, which do not have this problem. The none option would make more sense IMO if it refused to stringify an array when stringifying, and ignored/crash for duplicate keys when parsing. I don't see how the comma option can be made to handle arrays consistently.

@sindresorhus
Copy link
Owner

While I agree with you it's not optimal, people have been using this for years without complaining, so it cannot be that big of an issue. Not sure it's worth doing a breaking change to change the default, but we should at least make the "catches" clearer in the docs.

// @zepod @rapzo @yaodingyd Mentioning you in case you have an opinion on this.

@yaodingyd
Copy link
Contributor

I think better documentation would be fine, this is not worth a code change.

@rapzo
Copy link
Contributor

rapzo commented Oct 2, 2019

I understand the importance of predictability and wouldn't condone at all any code breaking change.

@sindresorhus
Copy link
Owner

I think we could improve the situation by supporting optionally defining the type of one or more keys. See: #228 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants