Paste JSON to explore nested values without losing sight of the source. XML input is also converted, using the tool’s own mapping conventions.
Runs locally in your browserThe document you paste on the left is parsed as you type and drawn on the right as a coloured tree: keys, strings, numbers, true/false and null each get their own colour, and every object or array carries a marker that collapses it to Object{…} or Array[n]. There is no run button — the two panes stay in step while you edit.
Everything runs in the tab: the text is parsed and rendered by JavaScript in the browser and no request carries it anywhere. Text that starts with < and ends with > is treated as XML and converted first.
The tree is built from the parsed document, not from the text: keys keep their document order and values are coloured by type. Folding replaces a branch with its marker, and the marker for an array also shows how many elements it holds.
Strings that are a single http:// or https:// address without spaces become links. Markup inside a key or a string is printed as text rather than interpreted, so a document cannot inject elements into the page.
The parser is strict JSON: comments, trailing commas, single-quoted keys, NaN and numbers with a leading zero are all rejected. A rejected document is reported with the line number, an excerpt with a caret under the position, and the token the parser expected.
Duplicate keys collapse to the last value. Numbers are read as JavaScript numbers, which is visible at the edges: digits past the 15–16 significant digits a double holds are rounded (12345678901234567890 is shown as 12345678901234567000), 1e21 is shown as 1e+21, and a value outside the double range such as 1e400 appears as Infinity in the tree and as null in the compact view, because that view is JSON.stringify output.
XML input is converted with the tool’s own mapping: attributes become @name keys, repeated sibling elements become arrays, CDATA becomes text, and the declaration and comments are dropped. An element that holds both text and child elements keeps the children and puts the surrounding text under a #text key.
XML view writes the current document back as XML. Text and attribute values are escaped, element names XML cannot carry are folded to legal ones (a space or a leading digit becomes an underscore) and a #text key is written as text rather than as a tag. The result is read-only text you can select and copy.
The page sets no size limit, but the tree is real page markup, so a very large document is heavy: a 1.1 MB sample produced about 25 MB of markup and took close to a second. A few thousand lines stay responsive — re-rendering a 300-row document on each keystroke took 6 to 15 ms in Chrome after the first pass.
Nothing is stored: a reload starts from the sample in the left box, and Clear empties both panes.