JSON to CSV
Paste a JSON array of objects and get a CSV table back, ready to open in a spreadsheet. Nested objects are flattened into dotted column names like address.city, list values are joined into one cell, and any field holding the delimiter, a quote or a line break is quoted properly. The conversion runs in this browser, so your data is never uploaded.
CSV is a flat format. Nested objects become dotted column names and lists are squeezed into a single cell, so a deeply nested structure does not survive the trip unchanged — converting the result back to JSON will not rebuild the original shape. Values are quoted only when they contain the delimiter, a double quote or a line break, and quotes inside a value are doubled. Rows end with a single newline and the file is plain UTF-8 with no byte-order mark; tab-delimited output is still saved as data.csv, so rename it if your tool expects .tsv. Everything is parsed and built in this browser and nothing is uploaded.
How to convert JSON to CSV
- Paste your JSON — an array of objects, or a single object — into the box.
- Pick a delimiter and choose whether the first line should be a header row.
- Check the row and column count, then copy the CSV or download it as a file.
When you'd use this
- Loading API output into a spreadsheet — You have a JSON response and need it as columns you can sort, filter and chart.
- Handing data to someone who doesn't read JSON — A CSV opens in any spreadsheet app, so a colleague can work with the same records without touching code.
- Preparing a bulk import — Plenty of admin panels, CRMs and mailing tools accept a CSV upload but have no way to take raw JSON.
- Skimming a long response — A table makes it far easier to spot a missing field or an odd value than a wall of braces.
Good to know
- Nested keys become dotted columns — An object inside an object turns into a column such as user.address.city, at any depth. If a key already contains a dot it can collide with a flattened path, and the value written last wins.
- Lists are collapsed into one cell — Array values are joined with a semicolon and a space. Anything object-shaped inside a list is written back as compact JSON so nothing disappears silently, but it is no longer a column a spreadsheet can work with.
- The header is the union of all rows — Columns are collected across every record in the order they first appear, so a key that only shows up in the last row still gets a column. Rows without that key get an empty cell.
- Line endings and encoding — Rows end with a single newline and the file is saved as plain UTF-8 with no byte-order mark. Google Sheets and Numbers detect that on their own; Excel may need its text-import step for non-English characters. Tab-delimited output still saves as a .csv file, so rename it to .tsv if your tool expects that.
Frequently asked questions
What JSON does this accept?
An array of objects is the usual input, and each object becomes one row. A single object works too and gives you one row. An array of plain numbers or strings is rejected, because there are no keys to build columns from.
How are nested objects handled?
They are flattened with dot notation, so {"user":{"city":"Oslo"}} becomes a column called user.city. There is no depth limit. An empty nested object has no keys inside it, so it adds no column at all.
What happens to a value containing a comma or a quote?
The field is wrapped in double quotes and any double quote inside it is doubled, which is the usual CSV convention. A line break inside a value is kept as it is and the field is quoted, so the row still reads back correctly.
Can it convert CSV back into JSON?
Not on this page — the CSV to JSON tool goes the other way. Keep in mind that a round trip will not rebuild nested objects or arrays, because CSV has no way to record them.
Is my data uploaded anywhere?
No. The JSON is parsed and the CSV is built by JavaScript running in your own browser, and the download is created from the text already on the page. Nothing is sent to a server.