Errors with a position, not just a message
Reports the exact character offset, line and column, plus a snippet of the surrounding text — so you find the missing comma rather than scanning the whole document.
Pretty-print JSON with your chosen indent and see exactly where errors are.
Loading tool…
The tool is loading its code on your device. This happens once and is cached for later visits.
Processed entirely on your device
Overview
Format, validate and beautify JSON online. Precise error positions, 2 or 4 space or tab indentation, key sorting and a collapsible tree view — all client-side.
JSON is simple enough that everyone thinks they can eyeball it, and large enough that nobody actually can. A formatter is the difference between finding a missing comma in two seconds and finding it in ten minutes.
The specification is small and unforgiving:
[1, 2, 3,] and {"a": 1,} both fail.// and /* */ are not part of JSON — JSONC and JSON5 add them, and many config parsers accept them, but a strict parser will not.true, false, null. Not undefined, not NaN, not Infinity, not dates.Most "why is my JSON broken" questions are answered by that list.
A native parse failure reports a character position, which is useful but not directly navigable. This tool converts that offset into a line and column number and shows the surrounding text with a caret under the offending character. When the reported position is the end of the document, the real problem is almost always an unclosed bracket earlier — count your braces.
Two spaces is the prevailing convention in JavaScript and Node ecosystems and what JSON.stringify(value, null, 2) produces.
Four spaces is common in Python and Java shops and easier to read in deeply nested documents.
Tabs keep indentation width a viewer preference rather than a file property.
Whatever you choose, be consistent — mixed tabs and spaces are invisible in most editors and maddening in diffs.
Alphabetically sorted keys turn a structural comparison into a line comparison. Two versions of the same config diff cleanly line by line instead of showing a whole object as changed because a member moved. This is why canonical JSON representations used in signing schemes specify a key order.
JSON has no integer type distinct from number, and JavaScript numbers are IEEE-754 doubles. Any integer above 2^53 − 1 (9007199254740991) loses precision on parse. Database IDs and snowflake identifiers routinely exceed that. The large-integer option rewrites long numeric literals as strings before parsing so they survive formatting intact — but remember that the resulting document is no longer the same JSON, so use it for inspection rather than for round-tripping.
Step by step
Paste your JSON into the input panel, or drop a .json file onto it.
Press Format — valid JSON is pretty-printed instantly.
If it is invalid, read the error message: it names the character position and the line.
Choose indentation, toggle key sorting, or switch to the tree view.
Copy the formatted output or download it as a .json file.
Why use it
What this tool is good for, and what it deliberately does not try to do.
Reports the exact character offset, line and column, plus a snippet of the surrounding text — so you find the missing comma rather than scanning the whole document.
Formatting is impossible without parsing, so a successful format is proof the JSON is syntactically valid. No separate validation step needed.
Collapse and expand nested objects and arrays to navigate a deep API response without scrolling through thousands of lines.
Payloads frequently contain tokens, user records and internal endpoints. Parsing happens in your tab, so nothing is posted anywhere.
Questions
Short, honest answers about quality, limits and privacy.