How it works
- 01
Paste the JSON
Or open a .json or .jsonl file. An array of objects is the usual shape, and five others are read too.
- 02
Choose the columns
Decide what happens to nested objects and to lists. The CSV updates as you change it.
- 03
Save it
Copy the CSV, or download it. Turn on Excel UTF-8 mark if you are opening it in Excel.
JSON nests, and a spreadsheet does not
JSON can hold an object inside an object, but a CSV cell holds one value. Something has to give, so the tool asks you what.
A nested object becomes one column per key, named with a dot. An address holding a city and a country turns into address.city and address.country, so the spreadsheet keeps both and nothing is buried.
A list is harder, because there is no right answer. Join puts the whole list in one cell, split by a semicolon, which reads well and sorts badly. One column each gives you tags.0 and tags.1, which sorts well and grows a column every time a record has one more tag. Keep as JSON leaves the brackets in the cell for a program to read later.
- Shapes read
- Array of objects, array of arrays, keyed object, single object, list of values, and JSON Lines.
- Nested keys
- Flattened to dotted columns, or left in one cell as JSON. Your choice, per document.
- Delimiters
- Comma, tab, semicolon or pipe. Tab downloads as .tsv, the rest as .csv.
- Size
- Small documents convert as you type. Larger ones go to a worker when you press Convert.
Which shapes are read, and where the columns come from
An array of objects is the normal export and the one to aim for. A keyed object, an array of arrays, a single object and a bare list of values all work too. So does JSON Lines, with one document on each line, which many log and export tools write.
The columns are every key that any record has, in the order they were first seen. A record missing a key gets an empty cell, not a shifted row, so a ragged export still lines up.
A cell is wrapped in quotes only when it holds the delimiter, a quote mark, a line break or a space at either end. Turn on Quote every cell if the program at the other end is fussy.