Guide
Turning a URL query string into structured JSON
A query string is the part of a web address after the question mark: a flat list of names and values joined by ampersands, with percent signs for anything unusual. It is easy for a browser to produce and awkward for a person to read, especially once filters, arrays and encoded addresses are mixed together. Converting it into JSON makes the structure visible.
How the string is split
The page takes everything after the first question mark, removes any fragment after a hash sign, and cuts the rest at every ampersand. A semicolon is also accepted as a separator, as in older HTML. Each pair is split at its first equals sign into a key and a value, and both are percent-decoded as UTF-8. The plus sign becomes a space, as in form submissions. If a percent sign is not followed by two hexadecimal digits, the page names the position instead of guessing.
Arrays and nesting
Query strings have no official way to carry lists or objects, so frameworks invented conventions. The page follows the common bracket style: a name followed by [] collects values into an array, a name followed by [key] makes a nested object, and the two combine, as in filter[size][min]=38. A key that is simply repeated, such as tag=a&tag=b, becomes an array too. The nesting switch turns bracket interpretation off if your keys contain brackets literally.
Types
Everything in a query string is text. With type conversion on, values that read exactly as true, false, null or a plain number become JSON booleans, null and numbers. A value such as 007 or 1e3 stays a string because converting it would change what it says, and integers beyond JavaScript’s safe range stay strings to avoid rounding. Switch the option off if you want every value as text. A separate option splits comma lists such as a=1,2,3 into arrays.
Using the page
Paste into the left box and copy the JSON from the right. Nothing is stored in the browser, because a query string often contains tokens or personal data. The options persist between visits so you do not have to reset them. Invalid input produces a message rather than partial output.
A worked example
The Sample button loads a shop search link. The result has q as “red shoes” (the plus sign decoded), page as the number 2, sort as “price”, tags as an array of “sale” and “new” from the two tags[] entries, a filter object with color “red” and a size object holding min 38 and max 44, instock as true, and ref as “a&b” from the encoded %26. Each of those conversions is visible in the output at once, which is more than a glance at the original link could give.
Limits
Parsing follows common conventions but not a single standard, so a server that uses another scheme, such as dots for nesting or numeric indices with gaps, may read the same string differently. Duplicated keys mixed with bracket forms are merged in a simple way. Very long strings work, but the page does not sort keys or remove duplicates. It also does not decode values that are themselves encoded, such as Base64 payloads or nested URLs; those appear as text for you to decode separately.
Related tools
- JSON to Query String turns an object back into parameters.
- URL Encoder escapes and unescapes single values.
- HTTP Headers to JSON parses the headers of the same request.
- cURL to Fetch turns a command line request into code.
Checked against the current version of the Query String to JSON on .

