JSON to CSV Converter

Paste JSON, get a downloadable CSV — nested objects flattened automatically.

A free online JSON to CSV converter — paste a JSON array of objects (or a single object), and get a properly-escaped CSV with a union header across all rows. No signup, runs entirely in your browser.

What does a JSON to CSV converter do?

A JSON to CSV converter turns a JSON array of objects — the shape most APIs return — into a flat, spreadsheet-friendly CSV table. Each object becomes a row, each unique key becomes a column, nested objects are flattened with dot notation, and values are properly quoted and escaped so commas, quotes, and line breaks inside the data don't corrupt the CSV structure.

How nested data is handled

Nested objects are flattened into dot-notation column names — {"address":{"city":"NYC"}} becomes a column called address.city. Arrays of plain values (strings, numbers) are joined into one cell with "; " as the separator. Arrays containing objects — which don't map cleanly to a single cell — are kept as a JSON string in that cell instead of being silently dropped.

Handling inconsistent keys

Real-world JSON often has objects with slightly different keys — some records might be missing an optional field. The CSV header is built from the union of every key seen across all rows, in the order they first appear, and any row missing a key just gets an empty cell there rather than the whole conversion failing.

CSV escaping

Any value containing a comma, a double quote, or a line break is wrapped in double quotes, with internal double quotes doubled up (the standard CSV escaping rule) — so a value like Smith, John or text containing quotation marks won't be misread as extra columns when opened in Excel, Google Sheets, or Numbers.

Frequently asked questions

Paste a JSON array of objects (or a single object) into the input — the CSV appears instantly below, with one column per unique key. Click Download CSV or Copy to grab the result.
Nested objects are flattened into dot-notation columns — {"address":{"city":"NYC"}} becomes a column named address.city. Arrays of plain values are joined with "; "; arrays of objects are kept as a JSON string in that cell.
The header is the union of every key across all rows, in first-seen order. Rows missing a given key get an empty cell for that column.
No. The conversion happens locally in your browser with JavaScript — nothing you paste is ever sent anywhere.

Related tools: JSON Formatter · Diff Checker · XML Formatter