JSON to CSV Converter
Turn a JSON array into a spreadsheet-ready CSV, flattening nested objects into columns. Runs in your browser — nothing is uploaded.
About JSON to CSV
JSON to CSV converts an array of objects into a spreadsheet-ready file. Columns are taken from every record rather than just the first, nested objects are flattened into dotted column names, and values containing commas or quotes are escaped properly.
Taking columns from the first record is the mistake that quietly loses data. Real API responses have optional fields, so if the first item happens to lack a property that later items include, every one of those values silently disappears. This converter takes the union of all keys across every record, in first-seen order, so nothing is dropped and the column order still reads sensibly.
Nested objects have to become something, and stringifying them produces cells full of unreadable JSON — or worse, the literal text [object Object]. Flattening into dotted paths instead means a nested address becomes address.city and address.postcode, which are usable spreadsheet columns you can sort and filter. Arrays remain as JSON, because a single cell genuinely cannot represent a list in any better way.
The downloaded file begins with a byte order mark, which looks like a technical detail and is in fact the single most common cause of mangled CSV. Without it Excel assumes the system's legacy encoding and renders accented names, Arabic, Urdu and Chinese as gibberish. With it, the file opens correctly on a double click on every platform.
How to convert JSON to CSV
- Paste a JSON array of objects, or an object wrapping one such as {"data": [...]}.
- Choose a separator — comma, semicolon or tab.
- Leave flattening on to turn nested objects into dotted columns.
- Click Convert to CSV.
- Copy the result, or download the .csv and open it in your spreadsheet app.
Tips & common problems
Semicolons for European spreadsheets
Locales that use a comma as the decimal separator expect semicolon-separated CSV. If your columns all land in one cell on opening, switch the separator and re-export.
Columns come from every record
Optional fields present only in later items still get their own column, so nothing is lost. Records missing that field simply have an empty cell.
The download includes a BOM for Excel
That marker is what makes accented and non-Latin characters open correctly. It is why the downloaded file is a few bytes larger than the text shown on screen.
Arrays stay as JSON in the cell
A spreadsheet cell cannot hold a list. If a nested array matters to your analysis, split it into separate rows before converting.
Frequently asked questions
What JSON shape does it accept?
An array of objects, or an object containing exactly one array such as {"data": [...]}, which is how most APIs return lists. A single object is treated as one row.
How are nested objects handled?
They are flattened into dotted column names, so a nested address becomes address.city and address.postcode. You can turn this off, in which case nested values are written as JSON in the cell.
Why does my CSV open wrong in Excel?
Usually the separator. Locales using a comma for decimals expect semicolons — switch the separator and re-download. The file already includes a BOM so encoding should not be the cause.
What happens to records with different fields?
Every distinct key across all records becomes a column, and records lacking one get an empty cell. Nothing is dropped.
Is my JSON uploaded?
No. Conversion happens entirely in your browser and nothing is transmitted or stored.
How are commas inside values handled?
Any value containing the separator, a quote or a line break is wrapped in quotes, with internal quotes doubled — the standard CSV escaping every spreadsheet understands.