JSON Tree Viewer
Browse large JSON as a collapsible tree, search it, and copy any node's JSONPath.
Click a node to see its path. Move with the arrow keys, use left and right to collapse and expand, and press Enter in the search box to jump to the next match.
About JSON Tree Viewer
The browser's JSON.parse silently reorders keys that look like integers, keeps only the last of two same-named members, and rounds any integer past 2^53 — so a payload can look fine in devtools and still be wrong. This viewer ships its own RFC 8259 parser, so the tree preserves original member order, tags duplicate keys, and prints big integers with their exact digits. Everything runs in your browser.
How to use JSON Tree Viewer
- 1
Paste your JSON into the input box or hit Sample; the tree builds itself shortly after you stop typing, with no run button to press.
- 2
Read the stat pills above the tree: node count, depth, keys, objects, arrays and parse time — plus an orange pill counting duplicate keys when the payload has any.
- 3
Expand or collapse a branch by clicking its twisty or double-clicking the row; Expand all and Collapse all handle the whole tree, and the arrow keys work once the tree has focus.
- 4
Type in the search box to highlight every matching key and value; parent branches open automatically, and Enter or the up/down buttons cycle through the hit counter.
- 5
Click a node to reveal its JSONPath plus its type, length or child count, then use Copy path or Copy value.
Frequently asked questions
Is my JSON uploaded anywhere?
No. Parsing, rendering, searching and copying all happen in JavaScript in your own browser, and no request carrying the input is ever sent to a server. That makes it safe for payloads containing customer data.
Why is my large number tagged as an unsafe int?
Because it sits outside JavaScript's safe integer range (2^53 minus 1). The viewer keeps the original digits from your input text and Copy value returns that untouched literal, but if your own code reads the same data with JSON.parse the trailing digits will change. The usual fix is to have the API send that identifier as a string.
Can the search box take a JSONPath expression?
No, and that is the most common misconception about this tool. Search is a plain case-insensitive substring match over key names and values. JSONPath is output only: it is the path of the node you selected, ready to paste into code or jq.
What are the limits on very large files?
The input is capped at 2 million characters, 150,000 nodes and 200 nesting levels, and only 6,000 rows are painted at a time — the rest appear once you collapse branches or search. Strings longer than 160 characters are shown truncated in the tree, but Copy value always yields the full value.