Parse and stringify URL query strings
Parse and stringify URL query strings
$ npm install query-string
This module targets Node.js 6 or later and the latest version of Chrome, Firefox, and Safari. If you want support for older browsers, or, if your project is using create-react-app v1, use version 5:
npm install [email protected].
const queryString = require('query-string');console.log(location.search); //=> '?foo=bar'
const parsed = queryString.parse(location.search); console.log(parsed); //=> {foo: 'bar'}
console.log(location.hash); //=> '#token=bada55cafe'
const parsedHash = queryString.parse(location.hash); console.log(parsedHash); //=> {token: 'bada55cafe'}
parsed.foo = 'unicorn'; parsed.ilike = 'pizza';
const stringified = queryString.stringify(parsed); //=> 'foo=unicorn&ilike=pizza'
location.search = stringified; // note that
location.search
automatically prepends a question mark console.log(location.search); //=> '?foo=unicorn&ilike=pizza'
Parse a query string into an object. Leading
?or
#are ignored, so you can pass
location.searchor
location.hashdirectly.
The returned object is created with
Object.create(null)and thus does not have a
prototype.
Type:
object
Type:
boolean\ Default:
true
Decode the keys and values. URL components are decoded with
decode-uri-component.
Type:
string\ Default:
'none'
'bracket': Parse arrays with bracket representation:
const queryString = require('query-string');queryString.parse('foo[]=1&foo[]=2&foo[]=3', {arrayFormat: 'bracket'}); //=> {foo: ['1', '2', '3']}
'index': Parse arrays with index representation:
const queryString = require('query-string');queryString.parse('foo[0]=1&foo[1]=2&foo[3]=3', {arrayFormat: 'index'}); //=> {foo: ['1', '2', '3']}
'comma': Parse arrays with elements separated by comma:
const queryString = require('query-string');queryString.parse('foo=1,2,3', {arrayFormat: 'comma'}); //=> {foo: ['1', '2', '3']}
'separator': Parse arrays with elements separated by a custom character:
const queryString = require('query-string');queryString.parse('foo=1|2|3', {arrayFormat: 'separator', arrayFormatSeparator: '|'}); //=> {foo: ['1', '2', '3']}
'none': Parse arrays with elements using duplicate keys:
const queryString = require('query-string');queryString.parse('foo=1&foo=2&foo=3'); //=> {foo: ['1', '2', '3']}
Type:
string\ Default:
','
The character used to separate array elements when using
{arrayFormat: 'separator'}.
Type:
Function | boolean\ Default:
true
Supports both
Functionas a custom sorting function or
falseto disable sorting.
Type:
boolean\ Default:
false
const queryString = require('query-string');queryString.parse('foo=1', {parseNumbers: true}); //=> {foo: 1}
Parse the value as a number type instead of string type if it's a number.
Type:
boolean\ Default:
false
const queryString = require('query-string');queryString.parse('foo=true', {parseBooleans: true}); //=> {foo: true}
Parse the value as a boolean type instead of string type if it's a boolean.
Stringify an object into a query string and sorting the keys.
Type:
object
Type:
boolean\ Default:
true
Strictly encode URI components with strict-uri-encode. It uses encodeURIComponent if set to false. You probably don't care about this option.
Type:
boolean\ Default:
true
URL encode the keys and values.
Type:
string\ Default:
'none'
'bracket': Serialize arrays using bracket representation:
const queryString = require('query-string');queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'bracket'}); //=> 'foo[]=1&foo[]=2&foo[]=3'
'index': Serialize arrays using index representation:
const queryString = require('query-string');queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'index'}); //=> 'foo[0]=1&foo[1]=2&foo[2]=3'
'comma': Serialize arrays by separating elements with comma:
const queryString = require('query-string');queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'comma'}); //=> 'foo=1,2,3'
'none': Serialize arrays by using duplicate keys:
const queryString = require('query-string');queryString.stringify({foo: [1, 2, 3]}); //=> 'foo=1&foo=2&foo=3'
Type:
string\ Default:
','
The character used to separate array elements when using
{arrayFormat: 'separator'}.
Type:
Function | boolean
Supports both
Functionas a custom sorting function or
falseto disable sorting.
const queryString = require('query-string');const order = ['c', 'a', 'b'];
queryString.stringify({a: 1, b: 2, c: 3}, { sort: (a, b) => order.indexOf(a) - order.indexOf(b) }); //=> 'c=3&a=1&b=2'
const queryString = require('query-string');queryString.stringify({b: 1, c: 2, a: 3}, {sort: false}); //=> 'b=1&c=2&a=3'
If omitted, keys are sorted using
Array#sort(), which means, converting them to strings and comparing strings in Unicode code point order.
Skip keys with
nullas the value.
Note that keys with
undefinedas the value are always skipped.
Type:
boolean\ Default:
false
const queryString = require('query-string');queryString.stringify({a: 1, b: undefined, c: null, d: 4}, { skipNull: true }); //=> 'a=1&d=4'
const queryString = require('query-string');queryString.stringify({a: undefined, b: null}, { skipNull: true }); //=> ''
Skip keys with an empty string as the value.
Type:
boolean\ Default:
false
const queryString = require('query-string');queryString.stringify({a: 1, b: '', c: '', d: 4}, { skipEmptyString: true }); //=> 'a=1&d=4'
const queryString = require('query-string');queryString.stringify({a: '', b: ''}, { skipEmptyString: true }); //=> ''
Extract a query string from a URL that can be passed into
.parse().
Note: This behaviour can be changed with the
skipNulloption.
Extract the URL and the query string as an object.
Returns an object with a
urland
queryproperty.
If the
parseFragmentIdentifieroption is
true, the object will also contain a
fragmentIdentifierproperty.
const queryString = require('query-string');queryString.parseUrl('https://foo.bar?foo=bar'); //=> {url: 'https://foo.bar', query: {foo: 'bar'}}
queryString.parseUrl('https://foo.bar?foo=bar#xyz', {parseFragmentIdentifier: true}); //=> {url: 'https://foo.bar', query: {foo: 'bar'}, fragmentIdentifier: 'xyz'}
Type:
object
The options are the same as for
.parse().
Extra options are as below.
Parse the fragment identifier from the URL.
Type:
boolean\ Default:
false
const queryString = require('query-string');queryString.parseUrl('https://foo.bar?foo=bar#xyz', {parseFragmentIdentifier: true}); //=> {url: 'https://foo.bar', query: {foo: 'bar'}, fragmentIdentifier: 'xyz'}
Stringify an object into a URL with a query string and sorting the keys. The inverse of
.parseUrl()
The
optionsare the same as for
.stringify().
Returns a string with the URL and a query string.
Query items in the
queryproperty overrides queries in the
urlproperty.
The
fragmentIdentifierproperty overrides the fragment identifier in the
urlproperty.
queryString.stringifyUrl({url: 'https://foo.bar', query: {foo: 'bar'}}); //=> 'https://foo.bar?foo=bar'queryString.stringifyUrl({url: 'https://foo.bar?foo=baz', query: {foo: 'bar'}}); //=> 'https://foo.bar?foo=bar'
queryString.stringifyUrl({ url: 'https://foo.bar', query: { top: 'foo' }, fragmentIdentifier: 'bar' }); //=> 'https://foo.bar?top=foo#bar'
Type:
object
Type:
string
The URL to stringify.
Type:
object
Query items to add to the URL.
Pick query parameters from a URL.
Returns a string with the new URL.
const queryString = require('query-string');queryString.pick('https://foo.bar?foo=1&bar=2#hello', ['foo']); //=> 'https://foo.bar?foo=1#hello'
queryString.pick('https://foo.bar?foo=1&bar=2#hello', (name, value) => value === 2, {parseNumbers: true}); //=> 'https://foo.bar?bar=2#hello'
Exclude query parameters from a URL.
Returns a string with the new URL.
const queryString = require('query-string');queryString.exclude('https://foo.bar?foo=1&bar=2#hello', ['foo']); //=> 'https://foo.bar?bar=2#hello'
queryString.exclude('https://foo.bar?foo=1&bar=2#hello', (name, value) => value === 2, {parseNumbers: true}); //=> 'https://foo.bar?foo=1#hello'
Type:
string
The URL containing the query parameters to filter.
Type:
string[]
The names of the query parameters to filter based on the function used.
Type:
(key, value) => boolean
A filter predicate that will be provided the name of each query parameter and its value. The
parseNumbersand
parseBooleansoptions also affect
value.
Type:
object
Parse options and stringify options.
This module intentionally doesn't support nesting as it's not spec'd and varies between implementations, which causes a lot of edge cases.
You're much better off just converting the object to a JSON string:
const queryString = require('query-string');queryString.stringify({ foo: 'bar', nested: JSON.stringify({ unicorn: 'cake' }) }); //=> 'foo=bar&nested=%7B%22unicorn%22%3A%22cake%22%7D'
However, there is support for multiple instances of the same key:
const queryString = require('query-string');queryString.parse('likes=cake&name=bob&likes=icecream'); //=> {likes: ['cake', 'icecream'], name: 'bob'}
queryString.stringify({color: ['taupe', 'chartreuse'], id: '515'}); //=> 'color=taupe&color=chartreuse&id=515'
Sometimes you want to unset a key, or maybe just make it present without assigning a value to it. Here is how falsy values are stringified:
const queryString = require('query-string');queryString.stringify({foo: false}); //=> 'foo=false'
queryString.stringify({foo: null}); //=> 'foo'
queryString.stringify({foo: undefined}); //=> ''
Available as part of the Tidelift Subscription.
The maintainers of query-string and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.