JSON to CSV Converter

Paste a JSON array of objects and get CSV that opens in Excel or Google Sheets. Conversion happens in your browser.

Runs in your browser — nothing you enter is uploaded

JSON to CSV Converter

All fields are required unless marked “optional”.

Adds a leading apostrophe to text starting with = + - or @.

Tip: press Ctrl+Enter (Cmd+Enter on Mac) inside a text box to run.

Your result will appear hereStart typing and it updates instantly.

Formula

  • columns = every key found in any object, in the order first seen
  • nested key path: address.city
  • A value containing the delimiter, a double quote or a line break is wrapped in double quotes, and quotes inside are doubled
  • Arrays are kept as JSON text inside one cell

Each object becomes one row; each key becomes a column, and missing keys leave empty cells.

Worked examples

Nested objects and a comma inside a value

JSON
[ {"id": 1, "name": "Ada", "address": {"city": "London", "zip": "N1"}, "tags": ["math", "code"]}, {"id": 2, "name": "Alan, T.", "address": {"city": "Wilmslow"}} ]
Delimiter
Comma ( , )
Include a header row
Yes
Flatten nested objects into columns (address.city)
Yes
Quote values
Only when needed
Protect against spreadsheet formulas
No

Rows

2

Columns: 5

id,name,address.city,address.zip,tags
1,Ada,London,N1,"[""math"",""code""]"
2,"Alan, T.",Wilmslow,,

Semicolon output with formula protection

JSON
[{"item": "=1+1", "price": 4.5}]
Delimiter
Semicolon ( ; )
Include a header row
Yes
Flatten nested objects into columns (address.city)
Yes
Quote values
Only when needed
Protect against spreadsheet formulas
Yes

Rows

1

Columns: 2

item;price
'=1+1;4.5

How it works

Each object in the array becomes one row, and the columns are the union of all keys found in any object, in the order they first appear, so objects with different keys still line up and gaps stay empty. Nested objects can be flattened into dotted column names such as address.city, while arrays are kept as JSON text inside a single cell, because there is no single correct way to spread a list across columns. A single object becomes one row, a list of plain values becomes one column named value, and an array of arrays becomes rows directly.

Output follows the standard CSV quoting rules: a value that contains the delimiter, a double quote or a line break is wrapped in quotes, and quotes inside it are doubled. Choose a semicolon if your spreadsheet uses a comma as its decimal separator. If the data comes from an untrusted source, turn on formula protection: text beginning with = + - or @ can be executed as a formula when the file is opened in a spreadsheet, so a leading apostrophe makes it plain text.

The JSON must be valid; if it is not, the message says so and you can find the problem with the JSON Validator or tidy it with the JSON Formatter. For the opposite direction use the CSV to JSON Converter, and to view the data's structure before converting, format it first. All processing is local.

Assumptions and limits

  • The input must be valid JSON; an array of objects works best.
  • Arrays inside objects are kept as JSON text in one cell, not split into columns.
  • Input above about 2 million characters is not accepted.

Common questions

What JSON shape converts best?
An array of objects, such as [{"name": "Ada"}, {"name": "Alan"}]. A single object, a list of values and an array of arrays also work.
How are nested objects handled?
By default they are flattened into dotted columns like address.city. Turn flattening off to keep each nested object as JSON text in one cell.
Why would I enable formula protection?
Spreadsheets can run text that starts with = + - or @ as a formula. If the data is untrusted, the leading apostrophe stops that.
Does Excel open the result correctly?
Save the output as a .csv file. If your Excel uses semicolons as separators, choose the semicolon delimiter.