JSONFlow · Workbench

Format, explore and convert JSON safely.

Validate, explore and convert JSON in the browser: exact error positions, a folding tree that stays fast on huge files, JSONPath queries, and export to CSV, XML, YAML, JSON Schema or TypeScript.

100% local — nothing is uploadedExact line and column for every errorCSV, XML, YAML, Schema and TypeScript
Source
Nothing loaded yet.

Paste or drop JSON on the left to start.

Documents under 256.0 KB build as you type; bigger ones wait for Parse.
Keep going

How it works

1

Bring the JSON in

Paste it, drop a file, or let another tool hand it over. Nothing is uploaded, and nothing heavy runs until you ask for it.

2

Read the verdict

Valid, or the exact line and column that breaks — plus duplicate keys and numbers JavaScript cannot hold.

3

Explore it

Fold the tree, filter by key or value, or run a JSONPath expression across the whole document.

4

Take it away

CSV, XML, YAML, JSON Lines, a JSON Schema, TypeScript or Go types — or send it straight to another tool.

A real parser, not JSON.parse

Errors arrive with a line, a column and a highlighted row in the gutter, instead of a character offset you have to count to.

64-bit ids survive

Long numeric ids are re-printed digit for digit. Every formatter built on JSON.parse quietly rounds them to the nearest double.

One-click repair

Comments, trailing commas, single quotes, unquoted keys, Python True/False/None and a stray byte order mark become strict JSON.

JSONPath queries

Wildcards, recursive descent, slices and filters like [?(@.price > 10)], evaluated by hand — nothing you type is ever executed.

Types from real data

JSON Schema, TypeScript interfaces or Go structs, inferred across every record so fields that are sometimes missing come out optional.

Honest flattening

Choose the path separator and what happens to nested arrays. Empty objects keep their column instead of vanishing from the export.

Structural diff

Two documents compared path by path, so a different key order is not reported as a thousand changes.

Big files stay usable

Validation moves to a web worker, the tree only mounts the rows on screen, and undo stores the characters that changed, not a copy of the document.

JSON formatter

Format, explore and convert JSON safely.

API payloads carry tokens, customer records and internal ids. JSONFlow never sends any of it anywhere: the parser, the tree, the queries and the exports all run inside this tab, so pasting a production response here is as private as opening it in your editor.

Everything runs in this tab

The parser, the folding tree, the JSONPath engine and every export are plain JavaScript running on your device. There is no upload step, no backend, and no request carrying your data — turn off your connection after the page loads and the tool keeps working.

The complete developer workbench for JSON.

What people use it for

Finding the one comma that breaks a config file, turning an API response into a spreadsheet, generating the TypeScript interface for an endpoint nobody documented, checking whether two versions of a payload actually differ, and pasting logs where the JSON arrived wrapped in a quoted string.

Why local matters here

A JSON payload is rarely anonymous: it holds bearer tokens, e-mail addresses, order ids and internal endpoints. Pasting that into a hosted formatter hands all of it to someone else's server. Here it never leaves the tab, so there is nothing to log, cache or leak.

Frequently asked questions

QAre my JSON payloads sent to any server?+

No. Parsing, validation, the tree, queries and every export run inside this browser tab. You can disconnect from the network once the page has loaded and everything still works.

QHow large a file can it really handle?+

On a normal laptop a 1.5 MB document with 180 000 nodes parses in well under a tenth of a second, and files of several tens of megabytes still open — validation moves to a web worker and the tree only renders the rows on screen. What actually limits you is memory, not the tool: past roughly 100 MB a browser tab starts to struggle whatever you use. Anything over 2 MB is held back behind a button instead of being loaded automatically, so a big file never freezes the page on arrival.

QWhy do my long ids change in other formatters?+

JSON.parse turns every number into a 64-bit float, which cannot represent integers above 2^53 exactly — a Twitter, Discord or Snowflake id loses its last digits. JSONFlow keeps the original digits from the source text and warns you when a number is in that range.

QMy file has comments and trailing commas. Is that a problem?+

No. When strict parsing fails, a tolerant pass runs automatically and, if it succeeds, a Repair button appears. It handles comments, trailing commas, single quotes, unquoted keys, Python True/False/None, NaN and Infinity, and rewrites the document as strict JSON.

QHow does the JSON to CSV flattening work?+

Each element of the top-level array becomes a row, and nested keys become dotted columns such as user.address.city. You choose the separator and whether nested arrays get one column each, stay as JSON, or are joined. On the way back, headers are taken literally — a first_name column stays first_name unless you explicitly ask for nesting.

QWhat can I write in the query bar?+

A JSONPath subset: $.users[0].name, wildcards with [*], recursive descent with .., slices like [0:5], negative indexes, and filters such as [?(@.price > 10)] or [?(@.name =~ ^a)]. Expressions are interpreted by hand, never evaluated as code.

Keywords

JSON formatterJSON validatorJSON viewerJSON to CSVJSON to XMLJSON to YAMLCSV to JSONJSON beautifierJSONPathJSON Schema generatorJSON to TypeScriptJSON diffJSON repairJSON Lines
Part of the oLoveTools suite
oLoveTools

Building fast, premium, and private utilities for designers and developers.

© 2026 oLoveToolsAbout

Next step

Convert JSON to XML XML to JSON

JSONFlow | JSON formatter, validator, viewer and converter

Format, validate and explore JSON with exact error positions and a tree that stays fast on large files. Convert to CSV, XML, YAML or JSON Lines, generate JSON Schema and TypeScript types, and run JSONPath queries — all in your browser.

Frequently asked questions

Are my JSON payloads sent to any server?

No. Parsing, validation, the tree, queries and every export run inside this browser tab. You can disconnect from the network once the page has loaded and everything still works.

How large a file can it really handle?

On a normal laptop a 1.5 MB document with 180 000 nodes parses in well under a tenth of a second, and files of several tens of megabytes still open — validation moves to a web worker and the tree only renders the rows on screen. What actually limits you is memory, not the tool: past roughly 100 MB a browser tab starts to struggle whatever you use. Anything over 2 MB is held back behind a button instead of being loaded automatically, so a big file never freezes the page on arrival.

Why do my long ids change in other formatters?

JSON.parse turns every number into a 64-bit float, which cannot represent integers above 2^53 exactly — a Twitter, Discord or Snowflake id loses its last digits. JSONFlow keeps the original digits from the source text and warns you when a number is in that range.

My file has comments and trailing commas. Is that a problem?

No. When strict parsing fails, a tolerant pass runs automatically and, if it succeeds, a Repair button appears. It handles comments, trailing commas, single quotes, unquoted keys, Python True/False/None, NaN and Infinity, and rewrites the document as strict JSON.

How does the JSON to CSV flattening work?

Each element of the top-level array becomes a row, and nested keys become dotted columns such as user.address.city. You choose the separator and whether nested arrays get one column each, stay as JSON, or are joined. On the way back, headers are taken literally — a first_name column stays first_name unless you explicitly ask for nesting.

What can I write in the query bar?

A JSONPath subset: $.users[0].name, wildcards with [*], recursive descent with .., slices like [0:5], negative indexes, and filters such as [?(@.price > 10)] or [?(@.name =~ ^a)]. Expressions are interpreted by hand, never evaluated as code.

Keywords

JSON formatter, JSON validator, JSON viewer, JSON to CSV, JSON to XML, JSON to YAML, CSV to JSON, JSON beautifier, JSONPath, JSON Schema generator, JSON to TypeScript, JSON diff, JSON repair, JSON Lines