Query String Parser
Parse a URL or query string into a readable table of decoded parameters and clean JSON.
Paste a URL above — the parameters are decoded as you type, right here in your browser.
| # | Key | Value | Raw (encoded) |
|---|
JSON
How it works
A query string is everything after the ? in a URL: pairs of
key=value joined by &. Paste a full URL or just the query
string and this parser strips the path and the #fragment, splits the pairs,
percent-decodes every key and value (optionally turning + back into a space,
the way HTML forms encode them) and shows the result in a table next to the raw encoded
text — which makes double-encoding bugs like %2520 obvious at a glance.
Repeated keys such as tag=a&tag=b and bracket keys such as
size[]=42 or user[name]=ada are folded into arrays and nested
objects in the JSON output, so you can paste it straight into a test or a bug report.
Malformed escapes (a stray %) do not break the page: those values are shown
raw with a warning. Everything runs locally in your browser with JavaScript — the URLs you
paste, which often carry session tokens, tracking IDs and customer data, are never uploaded.
Frequently asked questions
What is a query string?
A query string is the part of a URL after the ? — a list of key=value pairs joined by &, like ?q=blue+shoes&page=2. It carries data to the page or API: search terms, filters, pagination and tracking parameters such as utm_source. Anything after a # is the fragment, not part of the query string, and this parser ignores it.
How do I parse a query string online?
Paste a full URL or just the query string into the box above. The parser strips the path and the #fragment, splits the pairs on &, percent-decodes every key and value (turning + back into a space, the way HTML forms encode them) and shows the result instantly in a table with the raw encoded value beside it — so double-encoding mistakes like %2520 are easy to spot.
How are repeated parameters like tag=a&tag=b handled?
Repeated keys are collected into a JSON array, so tag=a&tag=b becomes "tag": ["a", "b"]. Bracket keys work too: size[]=42&size[]=43 becomes an array and user[name]=ada becomes a nested object. Turn off the grouping checkbox if you would rather keep the keys exactly as written. Every row is still listed separately in the table.