From records to rows
APIs and databases export lists of records as JSON arrays: [{"id":1,"name":"Ana"}, …]. Spreadsheets want rows and columns. This converter makes one row per record and one column per field, taking the header from every key that appears in any record, so a field present in only some records still gets its column.
Nested objects are flattened into dotted column names: {"address":{"city":"Lisbon"}} becomes a column address.city. Lists inside a record are kept as JSON text in a single cell.
Worked example
[{"id":1,"name":"Ana","city":{"name":"Lisbon"}},
{"id":2,"name":"Ben, Jr.","vip":true}]
becomes
id,name,city.name,vip
1,Ana,Lisbon,
2,"Ben, Jr.",,true
Ben, Jr. is quoted because it contains a comma. Choose the semicolon delimiter if your spreadsheet uses a decimal comma, as in most of Europe and Latin America.
How this works
The page parses the JSON strictly, flattens nested objects with dot paths, and builds the header from the union of keys in the order they first appear. Each value goes in its column; missing values and null become empty cells. Following RFC 4180, a field is wrapped in double quotes when it contains the delimiter, a quote, a line break or leading or trailing spaces, and quotes inside are doubled. Lines end with CRLF. Use CSV to JSON for the reverse. Everything runs in this tab.
Frequently asked
Why does Excel show everything in one column?
Your Excel uses semicolons as the list separator (common with decimal commas). Pick the semicolon delimiter.
How are nested objects handled?
They are flattened into dotted column names such as address.city. Lists stay as JSON text in one cell.
What if records have different fields?
The header includes every key from every record, and missing values are left empty.
Is my data uploaded?
No. The conversion runs in your browser.
Sources
- RFC 4180 — Common Format and MIME Type for CSV Files
- RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
- Wikipedia — Comma-separated values
Reviewed Oct 17, 2026 · test vectors fixtures/dev/json-to-csv/