How to convert JSON to CSV, nested JSON included
API exports, log dumps and database backups often come as JSON, but spreadsheets, BI tools and most people want CSV. Synth turns a JSON file into a table in your browser, flattens nested objects into columns, and lets you download the result as CSV. Nothing is installed, and the file never leaves your computer.
The quick way: three clicks
- Open Synth and drop your
.jsonor.ndjsonfile onto the page. No account is needed. - Open the Table View to see every row and column.
- Click Download CSV.
Synth reads a JSON array of objects, a single object, or newline-delimited JSON (one object per line). Each object becomes a row and each key becomes a column.
How nested JSON becomes columns
Take an orders.json file like this:
[
{
"id": 1,
"customer": { "name": "Ana", "email": "ana@example.com" },
"items": [ { "sku": "A1", "qty": 2 }, { "sku": "B7", "qty": 1 } ],
"total": 34.5
},
...
]
Synth loads it as a table called orders. The nested customer object becomes two columns with dot names, and the items array is kept as JSON text in one column:
id | customer.name | customer.email | items | total
1 | Ana | ana@example.com | [{"sku":"A1","qty":2},{"sku":"B7",...}] | 34.5
Pick and rename columns before exporting
To export only some fields, or give them friendlier names, run a query and download its results instead. Column names with dots need double quotes:
SELECT id,
"customer.name" AS customer,
"customer.email" AS email,
total
FROM orders;
Split an array into one row per item
A spreadsheet can't do much with JSON text in a cell. SQLite's json_each() turns each array element into its own row, so every line item gets a row of its own:
SELECT o.id,
o."customer.name" AS customer,
json_extract(item.value, '$.sku') AS sku,
json_extract(item.value, '$.qty') AS qty
FROM orders AS o, json_each(o.items) AS item;
Click Download CSV above the results to save it. Or keep one row per order and just count the items:
SELECT id,
json_array_length(items) AS item_count
FROM orders;
Don't want to write SQL?
Sign in and ask the AI assistant something like "one row per item with the order id, sku and quantity." It writes the query from your column names, never your data.
Frequently asked questions
How do I convert a JSON file to CSV?
Drop the JSON file into Synth, open the Table View, and click Download CSV. The file is read in your browser, each object becomes a row, and each key becomes a column.
What happens to nested JSON objects?
They are flattened into dot-notation columns. An object like {"customer": {"name": "Ana"}} becomes a column called customer.name.
What happens to arrays inside the JSON?
An array is kept as JSON text in a single column. To give each array item its own row, use SQLite's json_each() in a query, then download that result as CSV.
Does it work with NDJSON or JSON Lines?
Yes. Synth reads a JSON array of objects, a single object, or newline-delimited JSON with one object per line.
Is my JSON uploaded to a server?
No. The conversion runs in your browser tab with SQLite compiled to WebAssembly. Nothing is uploaded unless you sign in and choose to save the workspace to the cloud.
How big a file can I convert?
Up to 100,000 rows on the free plan, and up to 500,000 rows with Premium.