Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Parse and stringify URL query strings

License

NotificationsYou must be signed in to change notification settings

sindresorhus/query-string

Repository files navigation

Parse and stringify URLquery strings

Install

npm install query-string

Warning

Remember the hyphen! Do not install the deprecatedquerystring package!

For browser usage, this package targets the latest version of Chrome, Firefox, and Safari.

Usage

importqueryStringfrom'query-string';console.log(location.search);//=> '?foo=bar'constparsed=queryString.parse(location.search);console.log(parsed);//=> {foo: 'bar'}console.log(location.hash);//=> '#token=bada55cafe'constparsedHash=queryString.parse(location.hash);console.log(parsedHash);//=> {token: 'bada55cafe'}parsed.foo='unicorn';parsed.ilike='pizza';conststringified=queryString.stringify(parsed);//=> 'foo=unicorn&ilike=pizza'location.search=stringified;// note that `location.search` automatically prepends a question markconsole.log(location.search);//=> '?foo=unicorn&ilike=pizza'

API

.parse(string, options?)

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

The returned object is created withObject.create(null) and thus does not have aprototype.

options

Type:object

decode

Type:boolean
Default:true

Decode the keys and values. URL components are decoded withdecode-uri-component.

arrayFormat

Type:string
Default:'none'

  • 'bracket': Parse arrays with bracket representation:
importqueryStringfrom'query-string';queryString.parse('foo[]=1&foo[]=2&foo[]=3',{arrayFormat:'bracket'});//=> {foo: ['1', '2', '3']}
  • 'index': Parse arrays with index representation:
importqueryStringfrom'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:
importqueryStringfrom'query-string';queryString.parse('foo=1,2,3',{arrayFormat:'comma'});//=> {foo: ['1', '2', '3']}
  • 'separator': Parse arrays with elements separated by a custom character:
importqueryStringfrom'query-string';queryString.parse('foo=1|2|3',{arrayFormat:'separator',arrayFormatSeparator:'|'});//=> {foo: ['1', '2', '3']}
  • 'bracket-separator': Parse arrays (that are explicitly marked with brackets) with elements separated by a custom character:
importqueryStringfrom'query-string';queryString.parse('foo[]',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: []}queryString.parse('foo[]=',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: ['']}queryString.parse('foo[]=1',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: ['1']}queryString.parse('foo[]=1|2|3',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: ['1', '2', '3']}queryString.parse('foo[]=1||3|||6',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: ['1', '', 3, '', '', '6']}queryString.parse('foo[]=1|2|3&bar=fluffy&baz[]=4',{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> {foo: ['1', '2', '3'], bar: 'fluffy', baz:['4']}
  • 'colon-list-separator': Parse arrays with parameter names that are explicitly marked with:list:
importqueryStringfrom'query-string';queryString.parse('foo:list=one&foo:list=two',{arrayFormat:'colon-list-separator'});//=> {foo: ['one', 'two']}
  • 'none': Parse arrays with elements using duplicate keys:
importqueryStringfrom'query-string';queryString.parse('foo=1&foo=2&foo=3');//=> {foo: ['1', '2', '3']}
arrayFormatSeparator

Type:string
Default:','

The character used to separate array elements when using{arrayFormat: 'separator'}.

sort

Type:Function | boolean
Default:true

Supports bothFunction as a custom sorting function orfalse to disable sorting.

parseNumbers

Type:boolean
Default:false

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

parseBooleans

Type:boolean
Default:false

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

types

Type:object
Default:{}

Specifies a schema for parsing query values with explicit type declarations. When defined, the types provided here take precedence over general parsing options such asparseNumbers,parseBooleans, andarrayFormat.

Use this option to explicitly define the type of a specific parameter—particularly useful in cases where the type might otherwise be ambiguous (e.g., phone numbers or IDs).

You can also provide a custom function to transform the value. The function will receive the raw string and should return the desired parsed result.

Supported Types:

  • 'boolean': Parseflagged as a boolean (overriding theparseBooleans option):
queryString.parse('?isAdmin=true&flagged=true&isOkay=0',{parseBooleans:false,types:{flagged:'boolean',isOkay:'boolean',},});//=> {isAdmin: 'true', flagged: true, isOkay: false}

Note: The'boolean' type also converts'0' and'1' to booleans, and treats valueless keys (e.g.?flag) astrue.

  • 'string': ParsephoneNumber as a string (overriding theparseNumbers option):
importqueryStringfrom'query-string';queryString.parse('?phoneNumber=%2B380951234567&id=1',{parseNumbers:true,types:{phoneNumber:'string',}});//=> {phoneNumber: '+380951234567', id: 1}
  • 'number': Parseage as a number (even whenparseNumbers is false):
importqueryStringfrom'query-string';queryString.parse('?age=20&id=01234&zipcode=90210',{types:{age:'number',}});//=> {age: 20, id: '01234', zipcode: '90210'}
  • 'string[]': Parseitems as an array of strings (overriding theparseNumbers option):
importqueryStringfrom'query-string';queryString.parse('?age=20&items=1%2C2%2C3',{parseNumbers:true,types:{items:'string[]',}});//=> {age: 20, items: ['1', '2', '3']}
  • 'number[]': Parseitems as an array of numbers (even whenparseNumbers is false):
importqueryStringfrom'query-string';queryString.parse('?age=20&items=1%2C2%2C3',{types:{items:'number[]',}});//=> {age: '20', items: [1, 2, 3]}
  • 'Function': Provide a custom function as the parameter type. The parameter's value will equal the function's return value.
importqueryStringfrom'query-string';queryString.parse('?age=20&id=01234&zipcode=90210',{types:{age:(value)=>value*2,}});//=> {age: 40, id: '01234', zipcode: '90210'}

NOTE: Array types (string[],number[]) are ignored ifarrayFormat is set to'none'.

queryString.parse('ids=001%2C002%2C003&foods=apple%2Corange%2Cmango',{arrayFormat:'none',types:{ids:'number[]',foods:'string[]',},}//=> {ids:'001,002,003', foods:'apple,orange,mango'}
Function
importqueryStringfrom'query-string';queryString.parse('?age=20&id=01234&zipcode=90210',{types:{age:(value)=>value*2,}});//=> {age: 40, id: '01234', zipcode: '90210'}

Parse the value as a boolean type instead of string type if it's a boolean.

.stringify(object, options?)

Stringify an object into a query string and sorting the keys.

options

Type:object

strict

Type:boolean
Default:true

Strictly encode URI components. It usesencodeURIComponent if set to false. You probablydon't care about this option.

encode

Type:boolean
Default:true

URL encode the keys and values.

arrayFormat

Type:string
Default:'none'

  • 'bracket': Serialize arrays using bracket representation:
importqueryStringfrom'query-string';queryString.stringify({foo:[1,2,3]},{arrayFormat:'bracket'});//=> 'foo[]=1&foo[]=2&foo[]=3'
  • 'index': Serialize arrays using index representation:
importqueryStringfrom'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:
importqueryStringfrom'query-string';queryString.stringify({foo:[1,2,3]},{arrayFormat:'comma'});//=> 'foo=1,2,3'queryString.stringify({foo:[1,null,'']},{arrayFormat:'comma'});//=> 'foo=1,,'// Note that typing information for null values is lost// and `.parse('foo=1,,')` would return `{foo: [1, '', '']}`.
  • 'separator': Serialize arrays by separating elements with a custom character:
importqueryStringfrom'query-string';queryString.stringify({foo:[1,2,3]},{arrayFormat:'separator',arrayFormatSeparator:'|'});//=> 'foo=1|2|3'
  • 'bracket-separator': Serialize arrays by explicitly post-fixing array names with brackets and separating elements with a custom character:
importqueryStringfrom'query-string';queryString.stringify({foo:[]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]'queryString.stringify({foo:['']},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]='queryString.stringify({foo:[1]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]=1'queryString.stringify({foo:[1,2,3]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]=1|2|3'queryString.stringify({foo:[1,'',3,null,null,6]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]=1||3|||6'queryString.stringify({foo:[1,'',3,null,null,6]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|',skipNull:true});//=> 'foo[]=1||3|6'queryString.stringify({foo:[1,2,3],bar:'fluffy',baz:[4]},{arrayFormat:'bracket-separator',arrayFormatSeparator:'|'});//=> 'foo[]=1|2|3&bar=fluffy&baz[]=4'
  • 'colon-list-separator': Serialize arrays with parameter names that are explicitly marked with:list:
importqueryStringfrom'query-string';queryString.stringify({foo:['one','two']},{arrayFormat:'colon-list-separator'});//=> 'foo:list=one&foo:list=two'
  • 'none': Serialize arrays by using duplicate keys:
importqueryStringfrom'query-string';queryString.stringify({foo:[1,2,3]});//=> 'foo=1&foo=2&foo=3'
arrayFormatSeparator

Type:string
Default:','

The character used to separate array elements when using{arrayFormat: 'separator'}.

sort

Type:Function | boolean

Supports bothFunction as a custom sorting function orfalse to disable sorting.

importqueryStringfrom'query-string';constorder=['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'
importqueryStringfrom'query-string';queryString.stringify({b:1,c:2,a:3},{sort:false});//=> 'b=1&c=2&a=3'

If omitted, keys are sorted usingArray#sort(), which means, converting them to strings and comparing strings in Unicode code point order.

skipNull

Skip keys withnull as the value.

Note that keys withundefined as the value are always skipped.

Type:boolean
Default:false

importqueryStringfrom'query-string';queryString.stringify({a:1,b:undefined,c:null,d:4},{skipNull:true});//=> 'a=1&d=4'
importqueryStringfrom'query-string';queryString.stringify({a:undefined,b:null},{skipNull:true});//=> ''
skipEmptyString

Skip keys with an empty string as the value.

Type:boolean
Default:false

importqueryStringfrom'query-string';queryString.stringify({a:1,b:'',c:'',d:4},{skipEmptyString:true});//=> 'a=1&d=4'
importqueryStringfrom'query-string';queryString.stringify({a:'',b:''},{skipEmptyString:true});//=> ''

.extract(string)

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

Note: This behaviour can be changed with theskipNull option.

.parseUrl(string, options?)

Extract the URL and the query string as an object.

Returns an object with aurl andquery property.

If theparseFragmentIdentifier option istrue, the object will also contain afragmentIdentifier property.

importqueryStringfrom'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'}

options

Type:object

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

Extra options are as below.

parseFragmentIdentifier

Parse the fragment identifier from the URL.

Type:boolean
Default:false

importqueryStringfrom'query-string';queryString.parseUrl('https://foo.bar?foo=bar#xyz',{parseFragmentIdentifier:true});//=> {url: 'https://foo.bar', query: {foo: 'bar'}, fragmentIdentifier: 'xyz'}

.stringifyUrl(object, options?)

Stringify an object into a URL with a query string and sorting the keys. The inverse of.parseUrl()

Theoptions are the same as for.stringify().

Returns a string with the URL and a query string.

Query items in thequery property overrides queries in theurl property.

ThefragmentIdentifier property overrides the fragment identifier in theurl property.

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'

object

Type:object

url

Type:string

The URL to stringify.

query

Type:object

Query items to add to the URL.

.pick(url, keys, options?)

.pick(url, filter, options?)

Pick query parameters from a URL.

Returns a string with the new URL.

importqueryStringfrom'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(url, keys, options?)

.exclude(url, filter, options?)

Exclude query parameters from a URL.

Returns a string with the new URL.

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

url

Type:string

The URL containing the query parameters to filter.

keys

Type:string[]

The names of the query parameters to filter based on the function used.

filter

Type:(key, value) => boolean

A filter predicate that will be provided the name of each query parameter and its value. TheparseNumbers andparseBooleans options also affectvalue.

options

Type:object

Parse options andstringify options.

Nesting

This module intentionally doesn't support nesting as it's not spec'd and varies between implementations, which causes a lot ofedge cases.

You're much better off just converting the object to a JSON string:

importqueryStringfrom'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:

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

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:

importqueryStringfrom'query-string';queryString.stringify({foo:false});//=> 'foo=false'queryString.stringify({foo:null});//=> 'foo'queryString.stringify({foo:undefined});//=> ''

FAQ

Why is it parsing+ as a space?

Seethis answer.


[8]ページ先頭

©2009-2025 Movatter.jp