Skip to main content

Query String ⇄ JSON Converter

Parse a URL query string into JSON and rebuild a query string from JSON — two-way, live, with array + nested object conventions — 100% in your browser

  • Runs locally
  • Category Developer & DevOps
  • Best for Formatting, validating, shrinking, or inspecting code-adjacent text.
Array style
Query string
JSON

What this tool does

A two-way converter between URL query strings and JSON. Paste a query string (with or without the leading `?`) and instantly read it back as a formatted JSON object; or edit the JSON and watch the query string rebuild itself character by character. Both sides stay in sync, so you can poke at either one and immediately see the effect on the other.

It handles the messy parts that trip people up. Repeated keys like `tag=red&tag=blue` collapse into a JSON array `["red","blue"]` instead of silently dropping one. The bracket convention `a[b]=c` and `a[b][c]=d` expands into real nested objects, and `list[]=x&list[]=y` becomes an array. Percent-encoding (`%20`, `%2F`, `%E4%BD%A0`) and the `+`-for-space shorthand are decoded on the way in and re-encoded with `encodeURIComponent` on the way out, so a round trip never corrupts your data. Empty values (`flag=`) and bare keys (`debug`) are preserved rather than thrown away.

Going the other direction, a JSON object serialises back into a canonical query string: arrays become repeated keys (or `key[]`, your choice), nested objects become bracket paths, and every value is URL-safe. Bad JSON gets a clear, bilingual error pointing at the problem instead of a blank screen. Everything runs locally — no request ever leaves the tab, which matters when your query string carries a session token or an internal redirect URL you would rather not log on someone else's server.

Tool details

Input
Text + Structured content
The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
Output
Live result + Copy
The result area focuses on usable output, with copy, download, or preview actions when supported.
Privacy
Browser-side processing
The main tool logic does not call an external API, so inputs normally stay in the current tab.
Save / share
Shareable URL state
Key settings are encoded in the URL so another person can reopen the same setup.
Performance budget
Initial JS <= 10 KB
No WASM budget is declared, keeping the tool quick to open on mobile.
Best fit
Developer & DevOps · Developer
Category and role tags drive related tools, internal links, and quick fit checks.

How to use

  1. 1. Input

    Paste or drop your content into the tool panel.

  2. 2. Process

    Click the button. All processing is local in your browser.

  3. 3. Copy / Download

    Copy the result or download to disk in one click.

How Query String to JSON Converter fits into your work

Use it in the small gaps between coding, reviewing, debugging, and shipping.

Developer jobs

  • Formatting, validating, shrinking, or inspecting code-adjacent text.
  • Preparing snippets for documentation, tickets, commits, or handoff.
  • Checking a small payload quickly without switching tools.

Developer checks

  • Run irreversible transforms like minify or obfuscate on a copy.
  • Keep secrets out of pasted snippets unless the tool explicitly stays local.
  • Use your normal tests or linter before shipping transformed code.

Good next steps

These links move the current task into a more complete workflow.

  1. 1 URL Query Params Extractor Extract, deduplicate, inspect, copy, and export query parameters from one URL or many URLs locally. Open
  2. 2 JSON Formatter & Validator Format, validate, and minify JSON instantly — right in your browser. Open
  3. 3 URL Encoder / Decoder Encode and decode URL-unsafe characters — query strings, path segments, full URLs — instant, browser-only Open

Real-world use cases

  • Turn a captured API request into editable JSON

    You copied a GET request out of the browser DevTools Network tab and the whole payload lives in the query string: `?fields=id,name&include=author&filter[status]=active&page[size]=20`. Reading that by eye is painful. Paste it here, flip on bracket notation, and you get a clean JSON tree — `filter.status`, `page.size`, the `fields` list — that you can actually read and edit. Change `page.size` to 50 in the JSON, copy the rebuilt query string, paste it back into your HTTP client, and fire the request again. No hand-counting ampersands.

  • Audit and clean a UTM-laden marketing link

    A link from a campaign tool arrives as `?utm_source=newsletter&utm_medium=email&utm_campaign=spring&ref=&gclid=abc123`. Parse it to JSON and the empty `ref=` jumps out immediately, and `gclid` is plainly the click ID you want to strip before re-sharing. Delete those two keys in the JSON pane, copy the minimal query string, and you have a clean link. Building UTMs from scratch instead? The UTM Builder writes them for you; this tool is for taking apart and fixing the ones you already have.

  • Debug a redirect that keeps dropping a parameter

    A login redirect is supposed to carry `?return_to=/dashboard&plan=pro&promo=WELCOME` but users land without the promo. Paste the URL the server actually produced, parse to JSON, and compare it side by side with the JSON of the URL you expected. If `promo` is missing from the parsed object, the bug is upstream of the redirect; if it is present but the value is `WELCOME%2F`, you have a double-encoding problem — the re-encoded output here makes that obvious.

  • Reshape form data for a different backend

    One service expects flat keys (`name=ada&role=admin`) while another wants nested brackets (`user[name]=ada&user[role]=admin`). Parse the flat string to JSON, restructure the object into a `user` block in the JSON editor, then rebuild with bracket notation on. You have migrated the encoding without touching a single percent sign by hand, and the live preview confirms the new string before you paste it anywhere.

  • Hand a teammate a shareable, pre-filled state

    You are debugging a search page whose state lives entirely in the query string: `?q=opus&sort=recent&tags=ai&tags=tools`. Get it into the exact shape you want here, then copy the page's share link — the query-string input rides along in the URL, so your teammate opens the tool already showing the same parsed JSON. Pair it with a Slack message and they see the repeated `tags` array rendered correctly, no setup on their end.

Common pitfalls

  • Forgetting to turn on bracket notation when your string actually uses brackets. With the option off, `user[name]=ada` parses to a single flat key literally named `user[name]` — which is correct if the bracket is part of the real key, but surprising if you expected nesting. Check the toggle before reading the JSON.

  • Assuming numeric-looking values become numbers. A query string has no types: `page=2` parses to the string `"2"`, not the number `2`, because re-encoding a guessed number could silently change data (leading zeros, big integers). If your backend needs real numbers, cast them after parsing.

  • Sharing a query string that contains a secret. The input is stored in the page URL for the share feature, so a session token or signed redirect in your string ends up in the access log of wherever you paste the link. For anything sensitive, copy the JSON or query string text directly instead of using the share link.

Privacy

Parsing, serialising, and JSON formatting are all plain JavaScript that runs inside your browser tab. No query string, no JSON, and no record of what you converted is ever sent to a server. Your option choices (bracket notation, array style) are saved only in this browser's localStorage. The one caveat: for the "share link" feature, your query-string input is encoded into the page URL, so if you paste that link somewhere the destination's access log will see the string. For a query string carrying a token, session id, or signed redirect, copy the text directly rather than sharing the URL.

FAQ

Tool combos

Folks in your role tend to reach for these alongside this tool.

Made by Toolora · 100% client-side · Updated 2026-06-13