Reading JSON is easy. Locating one field inside 4,000 lines of it is the real work.
A response you wrote yourself reads fine. A response somebody else wrote, eleven levels deep with three arrays of objects in the middle, turns into a search problem. You know the field is called tax_rate. You do not know whether it sits under order.totals, on every line item, or in both places holding different numbers.
This page answers that question rather than the formatting one. Paste a document and the tree opens two levels, which shows the shape without a wall of text. Type into the search box and every key and every value is checked in one pass, with a match count beside the box and arrows to step between hits. Select any row and the bar above the tree fills in with the full path, ready to copy.
From a paste to a working path in four moves
- Drop the document into the input panel, or pick one of the three samples. Parsing runs while you type, so a broken file reports its line and column instead of leaving you with an empty tree.
- Press Hide input once the tree renders. The panel folds away and the tree takes the full width, which pays off on data that nests past four or five levels.
- Type a field name into the search box. Hits are counted, marked amber, and the two arrows step through them one at a time. Switch on Only matches to drop every branch holding nothing you asked for.
- Select the row you were after and press Copy path. Out comes
$.results[0].settings.notifications.digest, ready for ajqfilter, a JSONPath expression, or a line of application code.
Dot path or JSON Pointer, and which one your next tool expects
The same field has two standard written forms, and picking the wrong one produces a syntax error rather than a wrong answer, so the two buttons sit side by side above the tree.
- $.results[0].settings.theme
- Dot notation, the form
jq, JSONPath libraries and most template languages read. Keys that are not plain identifiers come out bracketed and quoted, so a header name writes as["content-type"]instead of breaking at the hyphen. - /results/0/settings/theme
- JSON Pointer, defined by RFC 6901. This is what JSON Schema validation errors quote, what an OpenAPI
$refholds, and what a JSON Patch operation targets. A key containing a slash or a tilde is escaped as~1and~0.
Choose by whatever reads the path next, not by preference. A schema validator rejects dot notation outright, and jq has no idea what to do with a pointer.
Long arrays arrive in blocks of 200
An array of 12,000 entries rendered in one pass creates 12,000 rows, and the browser locks up before the first one paints. Children load here in blocks of 200, with a button at the foot of each block that pulls the next set. The count on the parent row always reports the real total, so 12000 items stays accurate while 200 rows are drawn.
Search works on the parsed data rather than the drawn rows, so a value sitting in entry 9,842 is still found when that row was never rendered. Stepping to the hit loads the blocks in between along the way.
Keyboard control, because a mouse is the slow way through a tree
Click any row once and the tree takes focus. From there the arrow keys do the moving, and your hand never leaves the keyboard.
| Key | What happens |
|---|---|
| ↑ and ↓ | Move between rows currently on screen, skipping anything collapsed |
| → | Open the selected branch, or drop into the first child when the branch is already open |
| ← | Close the branch, or jump up to the parent when it is already closed |
| Enter | Copy the dot path of the selected row |
| * | Open every branch, chunk buttons on long arrays aside |
| Enter in the search box | Step to the next hit, with Shift for the previous one |
Everything runs in the tab
Parsing, searching and the tree all happen in the page. No upload, no API call, no request in the path between your clipboard and the screen. JSON pasted into a browser tool routinely carries session tokens, database connection strings and customer records, so a round trip to a server buys nothing and risks plenty. Cut your connection after the page loads and the tool keeps working.
One behaviour worth knowing before you trust a number you read here. The tree is built with JSON.parse, which turns every number into a JavaScript double. Integers past roughly 15 digits get rounded, so a 19 digit Discord or Twitter ID displays with the last few digits changed. The JSON Beautifier keeps the original digits as text if you need to read one exactly.
Where this tool stops
- Reading and path finding, not editing. Changing a value means editing the source panel and letting the tree rebuild. JSON Editor is the page for changing values in place.
- No repair attempt. A broken document gets a line, a column and a reason, then the tree stays empty. JSON Fixer tries to patch common breakages instead.
- Search is a plain substring match across keys and values. No regular expressions, no filtering by type, no numeric ranges. JSON Path Tester runs real expressions against the same document.
- One document per load. NDJSON and JSON Lines files hold a separate record on each line, so the whole file fails to parse. Wrap the records in brackets first.
- Past roughly 20 MB a browser tab runs short of room, and mobile browsers discard background tabs well before that. Files of that size belong in
jqor a streaming parser. - Key order is shown exactly as the document lists it, and a repeated key resolves the way
JSON.parseresolves it, keeping the last value.
