The scenario this tool was built for
You get an error back from an API. The response body is one unbroken line — something like {"status":500,"error":{"code":"AUTH_EXPIRED","details":{"token_issued":1716...}}} — 1,800 characters, no whitespace. You could open DevTools, but the Network tab wraps it awkwardly and you can't collapse sections. You paste it here. Two seconds later you have a fully indented, color-coded structure where you can immediately see that details.token_issued was three days ago — the session expired and your refresh logic didn't fire. Bug found.
That's 90% of what this tool gets used for: quickly making a minified string readable during debugging. The secondary use is validation — pasting a hand-edited config or a JSON template to confirm you didn't accidentally leave a trailing comma or forget to close a bracket. Both take under 3 seconds.
What actually runs in your browser
The formatter calls the browser's native JSON.parse() — the same engine Chrome DevTools and Node.js use internally. There is no server step. Your JSON string is parsed entirely in the V8 or SpiderMonkey JavaScript engine already running on your machine. Parsing a typical 500 KB API response takes under 20 ms in Chrome 124. A 5 MB file takes roughly 200 ms — perceptible but still fast for debugging.
After parsing, the tool re-serializes the result using JSON.stringify(parsed, null, 2) for the formatted output. The tree view walks the parsed object recursively and renders each key-value pair as a collapsible DOM node. The CSV export flattens the top-level array (one object per row) and joins values with commas — standard spreadsheet import format, no library involved.
Nothing is sent to our servers. The Network tab in DevTools will show zero outbound requests when you click Format. If you're working with an API response that contains auth tokens, PII, or proprietary data, you can paste it safely — it never leaves the tab.
What this tool can't do
Knowing the limitations upfront saves time. Here's what won't work:
- JSONCJSON with comments — used in
tsconfig.json, VS Code settings, and some config files — is not valid JSON. The//or/* */lines will cause a parse error. Strip comments first, or use a JSONC-aware editor. - NDJSONNewline-delimited JSON (one object per line, used by log streams and some databases) is multiple documents, not one. Paste one object at a time, or split the file first.
- Files over ~30 MBThe browser tab may become unresponsive. For large files, use
jqin the terminal:cat file.json | jq .handles gigabyte-scale files without issue. - Schema validationThe tool checks syntax — whether the text is valid JSON — not semantics — whether the data matches a JSON Schema definition. For schema validation against a spec, use
ajvor similar.
Common JSON syntax errors and how to fix them
These are the most frequent JSON errors that cause validators to reject otherwise-correct data:
| Error type | Broken example | Fixed |
|---|---|---|
| Trailing comma after last item | {"a": 1, "b": 2,} | {"a": 1, "b": 2} |
| Single quotes instead of double quotes | {'name': 'Alice'} | {"name": "Alice"} |
| Unquoted key | {name: "Alice"} | {"name": "Alice"} |
| Comments (not valid JSON) | {"a": 1 // comment} | {"a": 1} |
| Trailing comma in array | [1, 2, 3,] | [1, 2, 3] |
| Unescaped backslash in string | {"path": "C:\Users\file"} | {"path": "C:\\Users\\file"} |
| Undefined / NaN value | {"value": undefined} | {"value": null} |
| Missing comma between properties | {"a": 1 "b": 2} | {"a": 1, "b": 2} |
Most of these errors come from copy-pasting JavaScript object literals (which allow trailing commas and single quotes) into a context that expects strict JSON. The JSON spec (ECMA-404) requires double-quoted keys and values, no trailing commas, and no comments.
