Convert JSON to CSV
Flatten an API response or an NDJSON export into a spreadsheet table, with every field from every record kept as its own column.
Drop your files here
.json, .ndjson, .txt · up to 300 MB
More settingsFewer settings
How to Convert to CSV
- 1
Drop your JSON file
Drag a .json or .ndjson file onto the page. A plain array, a single object or one record per line are all accepted.
- 2
Point at the array and pick a delimiter
If the records sit inside a wrapper, type the path to them, such as data.items. Then choose the separator your spreadsheet expects.
- 3
Convert and download the CSV
Press the button and save the table, ready to open in Excel, Numbers or Google Sheets.
The header is built from every record
A converter that reads keys from the first record only will silently lose a field that first appears in record nine hundred, and nobody notices until a column turns up empty weeks later. Here the whole file is walked first, the union of all keys becomes the header in order of first appearance, and only then are the rows written.
Nested objects become dot-named columns
A CSV has no place to put a structure, so an object inside a record is unfolded into columns named user.address.city. Anything deeper than the depth limit is written as a compact JSON string rather than dropped. Arrays can be joined into one cell, spread across numbered columns, or kept as JSON text.
A file Excel opens without an import dialog
The default output is UTF-8 with a byte order mark and CRLF line endings, which is what makes Excel show accented and Cyrillic text correctly on a double click. Windows-1251 is available for older tooling; characters it cannot represent become question marks and you are told how many.
Your data stays in the tab
Parsing the JSON, collecting the header, flattening the records and encoding the CSV all run locally in your browser. Nothing is uploaded, nothing is queued on a machine you do not control, and no account is needed. An export full of customer records or API keys never travels anywhere.
Frequently asked questions
What happens to nested objects inside my records?
They are flattened into dot-named columns, so a city buried in user.address turns into a column called user.address.city. A depth limit stops this from exploding on deeply nested data: anything below it is written into a single cell as JSON text, so the information is still there even when the structure is not.
My records are inside a wrapper object. How do I reach them?
Use the path field at the top. Write the chain of keys separated by dots, for example data.items or result.0.rows, and the converter starts from there. If the path does not resolve, the error lists the top-level keys actually present in the file so you can correct it.
Why does Excel put the whole row in one column?
Excel splits on the separator configured for your system locale, which in much of Europe is the semicolon rather than the comma. Convert again with semicolon selected as the delimiter and the columns line up. Google Sheets detects the separator on import, so it is unaffected either way.
What is the BOM at the start of the file for?
Those three bytes tell Excel the file is UTF-8 before it starts guessing. Without them Excel often assumes a legacy code page and shows accented or Cyrillic text as garbage. If your target system dislikes the marker, plain UTF-8 without BOM is one setting away.
What happens to arrays inside a record?
By default they are joined into one cell with a separator you choose, which suits short tag lists. Alternatively they can be spread over numbered columns such as tags.0 through tags.4, capped at fifty with a warning, or written out as a JSON string when the contents matter more than the layout.
Is NDJSON supported as input?
Yes. If the file does not parse as a single JSON document, each non-empty line is parsed as its own record instead, which covers NDJSON and JSON Lines exports without any setting to change.
Why is there a quote in front of a value starting with an equals sign?
Excel treats a cell beginning with =, + or @ as a formula, and a crafted value in an untrusted export can turn into a command when someone opens the file. A leading apostrophe disables that. Ordinary negative numbers like -5 or -12.5 are left exactly as they are.
Does my JSON get uploaded anywhere?
No. The parser, the flattener and the encoder are all JavaScript running inside this page. There is no server request, no storage and no logging of your content at any point.