JSON to CSV Converter
Turn a JSON array into a CSV file you can open in Excel, Google Sheets or Numbers. Nested fields become their own columns, and a table preview shows the result before you download it. One of our free JSON tools.
JSON
CSV
How to convert JSON to CSV
- Step 1
Add the JSON
Paste an array of objects, drop a .json file, or load a URL with your browser.
- Step 2
Check the table
Preview the rows and columns, then adjust flattening, array handling and the delimiter.
- Step 3
Download the CSV
Download data.csv, ticking Excel-friendly download if you will open it in Excel.
Worked example
address becomes an address.city column, the tags join into one cell, and the name containing a comma is quoted so it stays in one column.
[
{ "id": 1, "name": "Aisha", "address": { "city": "Pune" }, "tags": ["beta", "vip"] },
{ "id": 2, "name": "Diego, Jr.", "address": { "city": "Austin" }, "tags": [] }
] id,name,address.city,tags
1,Aisha,Pune,beta; vip
2,"Diego, Jr.",Austin, Which JSON shapes work
CSV is a table, so the converter looks for a list of records. An array of objects is the usual case: each object becomes a row. If the top level is an object with a single property holding an array of objects, as in a typical API response like {"data": [...], "page": 2}, that array is used and the footer says so. Any other object becomes a single row, and an array of plain values becomes one column called value.
The columns are every key found in any record, in the order they first appear. Records do not need the same keys: a missing key just leaves an empty cell, and a note above the output tells you how many rows had gaps. That is often the quickest way to spot inconsistent records in an export.
Nested objects and arrays
With Flatten nested objects on, each nested field gets its own column named by its path, so {"address": {"city": "Pune"}} becomes a column address.city. Turn it off to keep each nested object as JSON text in a single cell, which keeps the column count down for deeply nested data.
Arrays have three options. a; b joins simple lists like tags into one readable cell. Columns gives each item its own column, tags.0, tags.1 and so on, which suits short fixed-length lists such as coordinates. JSON writes the array as JSON text. Arrays of objects cannot be joined, so they use columns, or JSON if you choose it.
Opening the file in Excel
Excel guesses the file's encoding, and without a hint it often shows Müller instead of Müller. Tick Excel-friendly download to add a UTF-8 byte order mark that tells Excel which encoding to use. In countries where Excel uses a comma as the decimal separator, such as Germany, France or Brazil, it also expects semicolons between columns, so choose the semicolon delimiter. Google Sheets and Numbers read either.
Quoting and formula safety
Cells are quoted following RFC 4180: any value that contains the delimiter, a double quote or a line break is wrapped in double quotes, and quotes inside it are doubled. If the data came from users, tick Escape formulas. Cells starting with =, +, - or @ are then prefixed so spreadsheet apps show them as text instead of running them as formulas, which protects against CSV injection.
The table preview shows the first 100 rows. Copy and Download always include every row. To go the other way, use CSV to JSON.
Questions and answers
How do I open the CSV in Excel?
Tick Excel-friendly download, then download data.csv and open it. That adds a UTF-8 byte order mark so names like Müller or São Paulo show correctly. If your Excel uses a comma as the decimal separator, as in Germany or France, choose the semicolon delimiter.
What happens to nested objects?
With Flatten nested objects on, each nested field gets its own column named by its path, such as address.city. With it off, the whole nested object is written into one cell as JSON text.
How are arrays converted?
Choose a; b to join simple arrays into one cell, Columns to give each item its own column (tags.0, tags.1), or JSON to keep the array as JSON text. Arrays of objects always become columns or JSON.
Why are some cells empty?
The columns are every key found in any record. When a record does not have one of those keys, its cell is left empty, and a note above the output says how many rows were missing columns.
My JSON is an object, not an array. Will it work?
Yes. If the object has one property that holds a list of records, such as {"data": [...]}, that list is used. Any other object becomes a single row.
Related tools
All JSON & Schema toolsNext step
Need this built into your stack?
The team behind SyntaxSnap builds custom code generators, internal developer tools and API integrations.