JSON viewer
input.json
Paste your JSON here
or drop a .json file anywhere here
Formatted output appears here.
Reading an unfamiliar payload
The reason a tree beats formatted text is shape. Indented text tells you what the document contains; a tree tells you how it is organised, which is the question you actually have when a response arrives from an API you did not write.
A workable order of operations for something you have never seen before:
- Paste it. The root opens automatically, along with any small child objects, so the top-level shape is visible without a click.
- Read the status bar. Depth tells you how deep the nesting goes;keys shows total against unique, and a large gap between the two means you are looking at repeated records rather than a wide configuration object.
- If the root is an array of objects, switch to Table. Records are far easier to compare in rows than as sibling subtrees.
- Search for the field you care about, then use copy-path on the row to get the accessor for your code.
What each row tells you
- Collapsed containers carry a count —
3 itemsor5 keys— so you can judge whether a branch is worth opening before you open it. - Values are coloured by type, and strings keep their quotes. A number rendered as
"42"is a string, and that distinction is usually the bug you are hunting. nullis shown explicitly rather than as an empty cell, because a null and a missing key are different things.- Every row has copy-value and copy-path buttons. Copy-value gives raw text for strings and formatted JSON for containers.
Why large documents stay responsive
The viewer builds DOM lazily. A collapsed node holds no child elements at all, and opening one renders only its immediate children — 200 at a time for large arrays. A 20 MB document therefore costs one parse plus a handful of rows on first paint, rather than millions of nodes the browser has to lay out before it will respond to input.
Expand is the one operation that can be genuinely expensive, so it stops after 20,000 nodes and tells you it did. For a whole-document read, the formatted text view is the better tool.
Reading JSON that arrived inside a string
Log pipelines and message queues routinely deliver JSON encoded as a JSON string, which arrives looking like "{\"id\":7,\"ok\":true}". Paste it and pressUnescape: the outer string is parsed, the inner document is decoded, and the tree renders the real structure. It works repeatedly for payloads that were encoded more than once.
Common questions
Does search find matches inside collapsed nodes?
Yes. Search walks the parsed data structure rather than the rendered DOM, so a match twelve levels deep inside a closed branch is still found — the tree then opens every ancestor to reveal it. Viewers that search the DOM silently miss those.
What does the copy-path button give me?
A JSONPath expression that resolves to that node, such as $.endpoints[1].p99_ms. It is valid input for jq (drop the $), for most JSONPath libraries, and it maps directly onto property access in code.
Why does a long array show only part of itself?
Arrays render 200 children at a time, with a button to load the next batch. Building 100,000 rows of DOM up front is what makes other viewers freeze; this way the first paint is immediate and you pull in more only where you are actually looking.
Can I navigate the tree with the keyboard?
Yes — the tree implements the ARIA tree pattern. Arrow up and down move between visible rows, right expands, left collapses or jumps to the parent, and Enter toggles. Ctrl/⌘ + K focuses the search box.
The rest of the toolkit
Same engine, same privacy — every page runs entirely in your browser.
JSON formatter
Indent JSON with 2 spaces, 4 spaces, or tabs, then copy or download the result.
JSON validator
Find syntax errors with exact line, column, and a suggested fix.
JSON minifier
Strip whitespace and see the byte savings before and after.
JSON beautifier
Turn minified or broken JSON into clean, highlighted output.
JSON pretty print
Readable indentation with optional deep key sorting.
JSON to CSV
Flatten an array of objects into spreadsheet rows, quoted correctly.
CSV to JSON
Parse CSV — quotes, embedded commas, any delimiter — into JSON records.
JSON to YAML
Config-ready YAML with no folded strings and no anchors.
YAML to JSON
YAML 1.2 parsing, multi-document streams, errors reported by line.
JSON to XML
Arrays repeat their tag; @keys become attributes.
XML to JSON
Entities, CDATA, and namespaces handled by the browser’s XML parser.
JSON diff
Compare two documents by path — key order and indentation are ignored.