JSON formatter
Paste it, fix it, read it. Errors come with a line, a column and a fix. Your data never leaves this tab. Not even to us.
Paste JSON on the left, or load the sample and break it on purpose.
Working in the background.
EMPTY PASTE OR DROP A FILE
Errors, located
A browser's own parser says "Unexpected token" and, if you are lucky, a character offset. This page has its own scanner that stops at the first thing it cannot accept, prints the line with a caret under the exact column, names the token, and says what to change. It knows the classics: a trailing comma, single quotes, an unquoted key, a missing comma or bracket, NaN, undefined, a comment, a leading zero, a stray =, a line break inside a string, and the invisible non-breaking space a chat window pasted in.
Jump to it puts the cursor on the spot in the input. Fix it, and the stamp turns as you type.
The query box
Paths are written the way you would in JavaScript: a.b[2].c, items[*].id, [-1] for the last item, ["key with spaces"] when a key needs it. A star fans out, so orders[*].lines[*].sku gives you every SKU in one flat list. Results update as you type and never touch the output pane.
Tree and CSV
The tree opens two levels and lets you unfold the rest; every node carries its type and its size. To CSV takes an array of objects, one row each, and flattens nested objects into dotted columns like address.city. An object with a single array inside it is unwrapped for you. Anything else becomes one row.
What stays here
Everything on this page is plain JavaScript in your browser: JSON.parse and JSON.stringify for the fast path, a hand-written scanner for the error report, a Web Worker on the same origin for the big ones. There is no server doing the work, so there is nothing to send it to. Your document is not uploaded, not logged, and, unless you tick the box, gone when you close the tab. The only thing this page records is that a button was pressed, and which one.