Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including query-string with all npm packages installed. Try it out:

var queryString = require("query-string")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

query-string v6.5.0

Parse and stringify URL query strings

query-string Build Status

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 query-string@5.


const queryString = require('query-string');

//=> '?foo=bar'

const parsed = queryString.parse(;
//=> {foo: 'bar'}

//=> '#token=bada55cafe'

const parsedHash = queryString.parse(location.hash);
//=> {token: 'bada55cafe'} = 'unicorn';
parsed.ilike = 'pizza';

const stringified = queryString.stringify(parsed);
//=> 'foo=unicorn&ilike=pizza' = stringified;
// note that `` automatically prepends a question mark
//=> '?foo=unicorn&ilike=pizza'


.parse(string, [options])

Parse a query string into an object. Leading ? or # are ignored, so you can pass or location.hash directly.

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:
queryString.parse('foo[]=1&foo[]=2&foo[]=3', {arrayFormat: 'bracket'});
//=> foo: [1, 2, 3]
  • index: Parse arrays with index representation:
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:
queryString.parse('foo=1,2,3', {arrayFormat: 'comma'});
//=> foo: [1, 2, 3]
  • none: Parse arrays with elements using duplicate keys:
//=> foo: [1, 2, 3]

.stringify(object, [options])

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:
queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'bracket'});
//=> 'foo[]=1&foo[]=2&foo[]=3'
  • index: Serialize arrays using index representation:
queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'index'});
//=> 'foo[0]=1&foo[1]=2&foo[3]=3'
  • comma: Serialize arrays by separating elements with comma:
queryString.stringify({foo: [1, 2, 3]}, {arrayFormat: 'comma'});
//=> 'foo=1,2,3'
  • none: Serialize arrays by using duplicate keys:
queryString.stringify({foo: [1, 2, 3]});
//=> 'foo=1&foo=2&foo=3'

Type: Function | boolean

Supports both Function as a custom sorting function or false to disable sorting.

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'
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.


Extract a query string from a URL that can be passed into .parse().

.parseUrl(string, [options])

Extract the URL and the query string as an object.

The options are the same as for .parse().

Returns an object with a url and query property.

//=> {url: '', query: {foo: 'bar'}}


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:

    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:

//=> {likes: ['cake', 'icecream'], name: 'bob'}

queryString.stringify({color: ['taupe', 'chartreuse'], id: '515'});
//=> 'color=chartreuse&color=taupe&id=515'

Falsy values

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:

queryString.stringify({foo: false});
//=> 'foo=false'

queryString.stringify({foo: null});
//=> 'foo'

queryString.stringify({foo: undefined});
//=> ''


MIT © Sindre Sorhus


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free