Convert JSON to CSV online
Flatten nested JSON into a spreadsheet-ready CSV or TSV with dotted column names, custom column order and full quote control. Runs offline.
- Runs in your browser
- Files are never uploaded
- Free, no account
Comma-separated. Columns you leave out are appended in source order.
contact.email instead of dropping the nesting.
skills.0, skills.1 … instead of one JSON-encoded cell.
Off = quote only when the value contains a delimiter, quote or newline.
Use CRLF, which some legacy importers require.
Makes Excel open accented characters correctly.
JSON input
CSV output
How to convert JSON to CSV
- Paste or drop your JSON. An array of objects is the usual input, but single objects, arrays of arrays and column-array objects are all recognised automatically.
- Pick a delimiter. Comma is standard; semicolon suits many European Excel installs; tab produces a TSV that pastes straight into a spreadsheet.
- Decide how deep to flatten. Nested objects become dotted columns. Arrays either stay as one JSON-encoded cell or fan out into indexed columns.
- Order the columns. Keep source order, sort alphabetically, or type an exact list — anything you omit is appended afterwards.
- Download. Add the UTF-8 BOM if the file is going straight into Excel, then download the
.csvor.tsv.
How each JSON shape becomes a table
| Input | Result |
|---|---|
[{a:1}, {a:2}] | One row per object; keys become the header |
{a:[1,2], b:[3,4]} | Column arrays are transposed into two rows |
{a:1, b:2} | A single object becomes a single row |
[[1,2],[3,4]] | Raw grid; columns are named column_1, column_2… |
[1, 2, 3] | A single “value” column with one row per item |
Flattening rules
Every leaf of the document becomes exactly one column, named by its path. Given
{ "contact": { "email": "a@b.c" }, "skills": ["go", "sql"] } you get:
contact.email— always, when flattening is on.skillscontaining["go","sql"]— the default, which keeps the array intact and re-importable.skills.0andskills.1— when “Split arrays into columns” is on, which is better for pivot tables and filtering.
Records with different keys are unioned: the header contains every column that appears anywhere, and rows missing a field get an empty cell. Column order follows first appearance in the document unless you change it.
Quoting and escaping
By default a field is quoted only when it needs to be — that is, when it contains the delimiter, a
double quote, a carriage return or a newline. Quotes inside a quoted field are doubled, per RFC 4180,
so She said "hi" is written as "She said ""hi""". Switch on “Quote every
field” when the receiving system is strict about types and you want it to treat everything as text.
Getting a clean import into Excel
Two settings matter. First, the UTF-8 BOM: without those three leading bytes Excel
assumes the local code page and turns José into José. Second,
the delimiter: Excel uses your Windows list separator, which is a semicolon in much of
Europe. If double-clicking the file dumps every row into column A, re-export with semicolons — or use
the CSV to Excel converter, which sidesteps the problem by writing a real
.xlsx workbook.
Everything stays on your device
API dumps routinely contain email addresses, tokens and order histories. This page never sends them anywhere: the JSON is parsed and the CSV assembled by Papa Parse running in your tab, and the download is created from an in-memory blob. Nothing is logged, queued or retained.
Questions
What JSON shapes are supported?
An array of objects is the usual input, but a single object, an array of arrays, and an object whose values are all arrays (column format) are all handled automatically.
How are nested objects turned into columns?
They are flattened with dots: { "contact": { "email": "a@b.c" } } becomes a column named contact.email. Switch flattening off to JSON-encode the nested value in a single cell instead.
What happens to arrays inside a record?
By default an array becomes one JSON-encoded cell such as ["a","b"]. Turn on “Split arrays into columns” to get skills.0, skills.1 and so on.
Why does Excel mangle my accented characters?
Excel assumes the system code page unless the file starts with a UTF-8 byte order mark. Enable “Add UTF-8 BOM” and the accents open correctly.
Can I control the column order?
Yes — keep source order, sort alphabetically, or type an exact comma-separated list. Columns you leave out of the list are appended in their original order.