JSON to CSV

Paste a JSON array and get a spreadsheet: nested fields become their own columns, you choose which columns to keep and in what order, and you download CSV or Excel.

  • 100% free
  • Runs in your browser
  • No uploads
Arrays inside items

Columns and downloads appear here once the JSON is read.

How to convert JSON to CSV

  1. Paste or open your JSON. An array of objects works best, such as an API response or an export. Files up to 50 MB are fine.
  2. Choose how arrays are written. Join values, JSON text, or one column per item.
  3. Pick your columns. Untick columns you don't need and move the others up or down. The preview shows the first 100 rows exactly as they'll be saved.
  4. Download. Download CSV (comma, semicolon, tab or pipe separated) or an Excel .xlsx file, or copy the CSV text.

Example: customers with nested addresses

Three customer records, each with an address object and a list of tags:

[
  {"id": 1, "name": "Ada Lovelace", "address": {"city": "London", "postcode": "N1 9GU"}, "tags": ["admin", "early-adopter"]},
  {"id": 2, "name": "Turing, Alan", "address": {"city": "Manchester", "postcode": "M1 1AA"}, "tags": []},
  {"id": 3, "name": "Grace Hopper", "address": {"city": "New York"}, "tags": ["navy"]}
]

With Join values, this becomes:

id,name,address.city,address.postcode,tags
1,Ada Lovelace,London,N1 9GU,"admin, early-adopter"
2,"Turing, Alan",Manchester,M1 1AA,
3,Grace Hopper,New York,,navy

The name with a comma is wrapped in quotes so it stays in one column, Grace's missing postcode is an empty cell, and an empty array becomes an empty cell. The example in the tool also has a quote inside a note and a cell that looks like a formula, so you can see both being handled.

How the CSV is written

  • Columns appear in the order their keys are first seen. A key that only some items have still gets a column; the others leave it empty.
  • Quoting follows the CSV standard (RFC 4180): a value is quoted only when it contains the separator, a quote, a line break or leading or trailing spaces, and quotes inside are doubled.
  • Values: true and false stay as words, null becomes an empty cell, and empty objects become {}.
  • Separators: use Semicolon for Excel in countries that write decimals with a comma (much of Europe), and Tab for pasting into a spreadsheet. A tab-separated download is saved as .tsv.

Common problems

"This JSON is a single value, not a list." The root is a number or a string. Paste the array, or the object that contains it.

Too many columns. Deeply nested data with One column each can produce hundreds of columns. Switch arrays to JSON text, or untick what you don't need with None and then tick the few you want.

Invalid JSON. The error shows the line and column. Trailing commas and single quotes are the usual cause; the JSON validator can repair them.

Frequently asked questions

How are nested objects converted?

Each nested value gets its own column named by its path, joined with dots. {"address": {"city": "Paris"}} becomes a column called address.city. Objects nested several levels deep work the same way, for example user.profile.country.

What happens to arrays inside each item?

You choose. Join values puts a list of simple values in one cell separated by commas ("admin, editor"). JSON text keeps the array as JSON in the cell. One column each spreads it out into tags.0, tags.1 and so on. Arrays that contain objects are always written as JSON text in Join mode, so nothing is lost.

My JSON is an object, not an array. Will it work?

Usually, yes. If the object holds a list of records, such as an API response like {"data": [...]}, the converter finds the largest list of objects (up to two levels down) and uses it; the summary tells you which path it used. A plain object without a list becomes a single row.

What does Protect against spreadsheet formulas do?

A cell that starts with =, +, - or @ can run as a formula when the CSV is opened in Excel or Google Sheets, which is a known way to smuggle in harmful links. With this on, such text gets a leading apostrophe so it shows as text. Real numbers like -5 are never changed. Turn it off if the CSV is going into a database rather than a spreadsheet.

Why is there a strange character at the start of the CSV file?

The downloaded file starts with an invisible byte order mark so Excel reads accented letters and other non-English characters correctly. Most programs ignore it. Copy CSV gives you the text without it.

Are long ID numbers kept exactly?

Yes. Numbers are copied digit for digit into the CSV. In the Excel file, numbers longer than 15 digits are stored as text, because Excel would otherwise round 12345678901234567890 to 12345678901234500000.