100% local — your data never leaves your browser

JSON to CSV — Open It in a Spreadsheet

Turn a JSON array of objects into a spreadsheet. The keys become the header row, ready to open in Excel, Numbers or Google Sheets.

Instant Private Zero cookies
Delimiter

JSON input

CSV output

What this tool does

An array of objects becomes rows; the keys become the header.

[
  { "name": "Ada", "born": 1815 },
  { "name": "Alan", "born": 1912 }
]
name,born
Ada,1815
Alan,1912

The root has to be an array of objects: a table is a list of records, and a single object has no rows. Wrap it in [ ] if you meant one row.

Long identifiers keep their digits

[{ "id": 12345678901234567890 }]

comes out with all twenty digits. Converters that parse JSON into a JavaScript value first round anything past about fifteen — silently, and into a number that no longer matches the row it came from.

Three ambiguities, named

Null and empty string are the same cell. null and "" both produce nothing between the delimiters, and no reader can tell them apart afterwards. If the difference matters, CSV is the wrong destination.

A nested value becomes JSON in the cell. A cell holds one value; your key holds a subtree. Spreading it over invented parent.child columns would impose a naming convention your consumer never agreed to.

Ragged records become a union. The header is every key seen, in first-seen order; a record missing one gets an empty cell. Dropping the column, or the row, would lose data for the sake of a tidy rectangle.

The Excel option

Excel does not read plain UTF-8 CSV reliably: it guesses the encoding from the bytes and usually guesses your system’s legacy code page, which is how café becomes café.

The Excel setting writes two things Excel understands: a byte-order mark, and a leading sep=, line that names the delimiter. Neither is standard CSV — sep= in particular is a Microsoft extension that other readers will show as a first row of data — which is why it is a setting you turn on, not the default.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

Why does Excel show my accented text as garbage?
Because Excel guesses the encoding from the bytes, and without a hint it guesses your system’s legacy code page rather than UTF-8. The Excel option writes a byte-order mark and a `sep=` line, which is what tells Excel both the encoding and the delimiter. It is not standard CSV, which is why it is a setting and not the default.
Can a CSV distinguish null from an empty string?
No, and none can. `{"note": null}` and `{"note": ""}` both give an empty cell, and reading the file back cannot tell which it was. If that difference matters to you, CSV is the wrong destination — or add a convention of your own, such as a literal `NULL`, before converting.
My records do not all have the same keys. What happens?
The header is the union of every key seen, in first-seen order, and a record missing one gets an empty cell. Nothing is dropped for being irregular: an export where only some rows carry an optional field is normal, not an error.

Related converters