100% local — your data never leaves your browser

JSON to Query String — Ready for the URL

Convert a flat JSON object into a URL query string. Percent-encoding is handled and arrays become repeated keys — paste it after the question mark.

Instant Private Zero cookies

JSON input

Query String output

What this tool does

A flat JSON object becomes the part of a URL that comes after the ?.

{ "q": "café au lait", "page": 2 }
q=caf%C3%A9+au+lait&page=2

The ? itself is not included — you are usually pasting this after one you already have.

Arrays become repeated keys

{ "tag": ["news", "draft"] }
tag=news&tag=draft

No standard says how an array belongs in a query string: tag[]=, tag[0]=, a comma-separated list and repeated keys are all in use somewhere. Repeated keys is what URLSearchParams and most server frameworks read back without configuration, and it is what the reverse tool on this site turns back into an array.

Nesting stops the conversion

{ "filter": { "status": "open" } }

is refused, and the message names filter. Flattening it to filter.status=open or filter[status]=open would be inventing a convention; the receiving end has to agree to it, and nothing in the JSON says which one it expects.

Types do not survive, and null survives least

Everything in a query string is text. 2 and "2" leave identical, true leaves as the four letters, and they all come back as strings.

null becomes an empty value:

{ "ref": null }
ref=

which reads back as "", not as null. The key is preserved, its emptiness is preserved, but the distinction between nothing and empty text is gone — a query string has no way to write it. That is stated here because it is the kind of loss you would otherwise find in production.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

How are arrays encoded — brackets or repeated keys?
Repeated keys: `{"tag":["a","b"]}` becomes `tag=a&tag=b`. There is no standard for arrays in a query string, so the choice is between conventions. This one is what `URLSearchParams` reads back, and what the query-string-to-JSON tool here reverses, so the pair is symmetric.
Why is my space a `+` rather than `%20`?
Because the output follows form encoding, where `+` means a space. A form decoder reads them identically. A consumer that only percent-decodes will not: it sees a literal plus. If the string goes somewhere that does not do form decoding, replace `+` with `%20` before sending it.
Can I get my types back afterwards?
No. A query string carries text and nothing else, so `2`, `true` and `"2"` all leave as the same characters and come back as strings. Null is worse: it becomes an empty value, indistinguishable from an empty string. The page says where that loss happens rather than hiding it.

Related converters