Int64 and exact decimals
IDs beyond 2^53 survive paste → view → edit → copy → download with every digit intact. Nothing is coerced to a float, ever.
92233720368547758079223372036854775808
too precise for your viewer: a float parser reads that id back as 9007199254740992 — jsonloupe never rounds.
Five-million-element arrays open instantly. Diff, query, and turn the nesting into linked spreadsheet tables — all inside your browser tab.
Paste a Zstd, Base64 or PostgreSQL bytea blob and it opens as JSON with a transformation trace. Compress JSON the other way from the same app — no upload or separate converter.
0 bytes uploaded · no backend · no telemetry · no account · MIT
paste JSON — or a zstd / base64 / bytea blob, it decodes automatically
IDs beyond 2^53 survive paste → view → edit → copy → download with every digit intact. Nothing is coerced to a float, ever.
92233720368547758079223372036854775808
Virtualized tree with chunked expansion — [0 … 9999] range rows — and parsing, diffing, search and compression all off the UI thread.
Raw .zst, Base64-Zstd, or PostgreSQL \x… bytea opens with a transformation trace. Compress JSON the other way, choose its payload format, and inspect exact UTF-8, Zstd, Base64, and envelope sizes against editable budgets.
Every list gets a sheet of its own, joined back to its parent by id — never items/0/sku columns. Preview real rows, customize columns and missing values, then export Excel or CSV. Save the mapping to replay it on the next file or hand it to an agent.
Arrays align by identity, so reordering does not drown you in false changes. Ignore noisy fields by key or path prefix.
Copy any node as JSONPath, JSON Pointer, or JS accessor. Epoch → local date, lat/lng, uuid flags, and byte weight on collapsed nodes.
Filter, pluck, group and count in the worker; direct queries never leave your browser. Any array opens as a sortable table, and a table or result downloads as exact-digit CSV. Optional English → query sends your question and only the document shape — field names, types, and array lengths — to your chosen model, then shows the generated query for review before it runs locally. Save a useful query or turn it into a reusable pass/fail check.
$.tasks[?(@.status == 'FAILED')]
| group(@.failureReason)
Name sandboxed JavaScript for questions a query language should not answer, batch-run functions, and keep important queries as checks. Export both as a playbook file for tomorrow's document or a teammate; unsafe numeric literals can arrive as exact digit strings.
The same engine runs as an 11-tool MCP server. An agent loads a file or compressed blob once, then inspects its shape, profiles fields, queries and samples bounded slices, compares documents, exports exact results, or drafts a spreadsheet mapping while the document stays in the server process.
claude mcp add jsonloupe -- npx -y -p jsonloupe jsonloupe-mcp
And in a browser that speaks WebMCP — ChatGPT's in-app browser, or Chrome 149+ — this very page registers those verbs on the open document, plus three no server can offer: an agent can load a document into your viewer, scroll your tree to a row and flash it, or filter your view to its evidence through the same toolbar button you would press yourself. You both look at one document; what it returns is always data, never instructions.
Parsing, diffing and querying run in a web worker; documents are stored in IndexedDB on your own disk. There is no server to send them to. English query translation stays off until you connect OpenRouter or add your own API key, and even then it sends your question plus document shape — field names, types, and array lengths — never values. After you press Translate, “sent to model” records the exact request.