Runs on your device · Your file never leaves your device.
Drop a .json file or paste JSON straight from an API response and get a CSV you can open in Excel, Google Sheets or any import screen. A top-level list gives one row per item; an object that wraps a single list (like {"data": [...]}) uses that list; any other object becomes one row.
The rules are fixed so the result is predictable: nested objects become dot-separated columns (address.city), a list of plain values is joined with semicolons in one cell, and a list of objects inside a record gets numbered columns (items.0.name). The header row is the union of every key found, in the order they first appear, so records with missing fields simply leave a cell empty.
The CSV is written to RFC 4180 — fields with commas, quotes or line breaks are quoted properly — in UTF-8 with an optional byte-order mark so Excel shows Arabic, accents and symbols correctly. You see the first 200 lines before downloading, and nothing leaves your device.
How to convert JSON to CSV
Drop a JSON file, or paste the JSON into the box.
Pick the column separator for the output (comma by default) and whether to add the Excel BOM.
Press Convert to CSV and check the preview of the first lines.
Download the .csv.
Supported formats and limits
Input
JSON (.json) — a file or pasted text, UTF-8
Output
CSV, RFC 4180, UTF-8, CRLF line ends, optional BOM
Nesting
Objects → dot columns; lists of values → joined with ;
Separator
Comma, semicolon, tab or pipe
Where it runs
In your browser; nothing uploaded
Not for: A deeply nested single object with no list inside — it converts, but as one very wide row rather than a table.
Frequently asked questions
Are my files uploaded to a server?
No. This conversion runs entirely inside your browser using your own device’s processing power. The file never leaves your computer or phone, which is why it also works when your connection drops.
What happens to nested objects and arrays?
A nested object is flattened into dot columns: {"address":{"city":"Cairo"}} becomes a column named address.city. A list of plain values ("tags": ["a","b"]) is written as a;b in one cell. A list of objects inside a record gets numbered columns such as items.0.name, items.1.name.
My JSON is an object, not a list — what do I get?
If the object wraps exactly one list — the common {"results": [...]} shape — that list becomes the rows. Otherwise the object is written as a single row with one column per key.
Why does Excel show strange characters, and how do I fix it?
Excel guesses the encoding unless the file starts with a byte-order mark. The "Add a BOM for Excel" switch is on by default and adds that three-byte marker; turn it off for tools that insist on plain UTF-8.