How to convert JSON to CSV
- Paste your JSON: an array of objects, a single object, an API response that contains an array (such as
{"data": [ … ]}), or JSON Lines with one object per line. It is converted as you paste. - Choose the delimiter. Comma is the standard; choose semicolon if your Excel uses a comma as the decimal separator — in Germany, France, Spain, Italy, Brazil, Russia and most of Europe and Latin America.
- Choose how arrays are written: as JSON text in one cell, Joined with commas, or as Columns, one per item.
- Check the preview, then press Download for a .csv file, or Copy to paste the CSV somewhere else.
How the conversion works
CSV is a flat table, JSON a tree, so the converter flattens each record:
- Finding the rows. An array at the top level gives one row per item. If the top level is an object, the converter looks for the first array of objects inside it, level by level, and the Rows taken from line shows the path it used, such as
$.data.items. An object without such an array becomes a single row. - Nested objects become columns named with dots:
{"customer": {"city": "Lyon"}}gives a columncustomer.city, however deep the nesting. - Columns are the union of every key in every record, in the order they first appear. A record without a key gets an empty cell, so records with different fields line up correctly.
- Values: text is written as it is, numbers exactly as written in the JSON,
trueandfalseas words, andnullas an empty cell. - Quoting follows RFC 4180: a cell that contains the delimiter, a double quote or a line break is wrapped in double quotes, with each quote inside doubled. Lines end with CRLF, as the standard and Excel expect.
| Arrays option | {"tags": ["red", "blue"]} becomes |
|---|---|
| JSON text | tags ⏎ "[""red"",""blue""]" |
| Joined | tags ⏎ "red, blue" |
| Columns | tags.0,tags.1 ⏎ red,blue |
JSON text keeps every detail and can be turned back into JSON later. Joined values read best in a spreadsheet. Columns suit short lists of the same length, and for arrays of objects gives columns such as items.0.sku.
Worked example
The sample in the box is an API-style response with 2 orders under orders. The converter finds them at $.orders and writes 7 columns:
id,customer.name,customer.city,total,paid,items,note 9007199254740993,Zoë Müller,São Paulo,1234.50,true,"[""book"",""mug""]", 9007199254740994,Renée O'Brien,Montréal,89.9,false,"[""pen""]","Leave it at the door, please"
Look at the details. The customer object became customer.name and customer.city. The first order has no note, so its last cell is empty. The note of the second order contains a comma, so it is quoted. And the IDs, 9007199254740993 and 9007199254740994, are exact: both are above 253, where JavaScript’s own JSON.parse rounds numbers, which is why many converters turn the first into …992. With the semicolon delimiter, the second line becomes:
9007199254740993;Zoë Müller;São Paulo;1234.50;true;"[""book"",""mug""]";
Opening the CSV in Excel
- Delimiter: double-clicking a CSV makes Excel split it with the list separator of your Windows region settings. Where the decimal separator is a comma, that separator is a semicolon, and a comma-separated file lands in one column. Choose the semicolon, or import with Data › From Text/CSV, where you can pick the delimiter yourself.
- Accents and other scripts: without a hint, Excel reads a CSV in an old Windows code page, and “Zoë Müller” turns into “Zoë Müller”. The UTF-8 byte order mark (three invisible bytes, EF BB BF, at the start of the file) tells Excel the file is UTF-8. Leave it on for Excel; turn it off for programs that would read the mark as part of the first column name. Google Sheets and Numbers handle both.
- Long numbers: the CSV keeps every digit, but Excel keeps only 15 significant digits: it shows 9007199254740993 as 9.0072E+15 and stores it as 9007199254740990. Import such columns as Text. Excel also drops leading zeros from codes such as 02134.
- Formulas: a cell that starts with =, +, - or @ can run as a formula in a spreadsheet. If the JSON comes from strangers, check those cells before you open the file in Excel.
Limits and tips
- Files of a few megabytes convert in about a second. Results longer than 200,000 characters are offered as a download only, since a huge block of text is slow to show and copy.
- Invalid JSON is reported with its line and column. The JSON formatter explains each kind of error and how to fix it.
- If a response holds several arrays of records, paste just the one you want, or move it to the top.
- Everything runs in your browser: the JSON and the CSV never leave your device, and nothing is saved — reloading the page clears the box.
Frequently asked questions
Is my data uploaded?
No. The conversion is done by JavaScript in your browser and the download is created on your device, so it works with private exports, customer lists and API keys inside JSON, and even offline once the page has loaded.
Why does Excel put everything in one column?
Your Excel expects semicolons. In regions that write decimals with a comma, Excel uses the semicolon as the list separator when it opens a CSV. Choose Semicolon as the delimiter, or open the file with Data › From Text/CSV and pick the comma.
Why do accented letters look wrong in Excel?
Excel guessed the wrong character set. Keep UTF-8 BOM switched on, download the file again and open the new one: the byte order mark tells Excel that the file is UTF-8.
How are nested JSON objects converted?
They are flattened into columns with dotted names: {"user": {"address": {"city": "Lima"}}} becomes a column user.address.city. Arrays follow the option you choose: JSON text in one cell, joined values, or one column per item.
Can it convert JSON Lines (NDJSON)?
Yes. Paste one JSON value per line, as log files and data exports often use; each line becomes a row, and the columns are combined across all lines.
Last updated: October 16, 2026