AnyFormat

00 JSON → CSV

JSON to CSV

Paste JSON or drop a file. Nested objects become dotted columns.

01JSON in
02CSV out
03Options 5

Flattening turns {"address":{"city":"Oslo"}} into an address.city column.

  • No upload The conversion runs in this tab. Your file never travels — not to us, and not to the advertising.
  • No sign-up, no email, no daily cap There is no account system to sign up to.
  • No size limit we invented Only your device's memory — about ~2 GB on a desktop browser, ~400 MB on a phone.
  • Turn your Wi-Fi off and convert anyway The conversion needs nothing but this page. Ads will not load without a connection; your file will still convert. That is the whole claim, and it takes five seconds to check.

Paste JSON on the left and get CSV on the right, or drop a .json file. The conversion happens in this tab — your data is never sent anywhere, which matters when the JSON is a production API response or a customer export.

What happens to nested objects

CSV is flat and JSON is not, so something has to give. By default each nested object is flattened into dotted column names — {"address":{"city":"Oslo"}} becomes a column called address.city. That keeps every value addressable and is what spreadsheet users expect.

Arrays of plain values are joined with a semicolon into one cell, because exploding tags: ["a","b"] into tags.0 and tags.1 produces columns that differ from row to row and make the sheet unusable. Arrays of objects are flattened positionally (items.0.sku).

If you would rather keep the structure intact, switch Nested values to Keep as JSON and the whole object lands in a single cell as a JSON string — the right choice when the CSV is a staging step and something downstream will parse it again.

API responses that are not a bare array

Most APIs do not return […]; they return {"data": […], "total": 240, "page": 1}. Dropping that in produces one row of metadata unless the tool knows to look inside. This one searches the object for the array that is obviously the record set and uses it, then tells you which key it picked and which top-level keys it left behind.

An object keyed by ID — {"u_1": {…}, "u_2": {…}}, the shape Firebase and many caches use — becomes one row per key, with the key itself in a key column so you do not lose it.

Columns, missing fields and order

Records in real JSON rarely all have the same fields. The header is the union of every key seen across every record, in the order they first appear — never alphabetised, because the source order usually carries meaning. Where a record lacks a key the cell is left empty rather than filled with null, since an empty cell is what Excel and pandas both treat as missing.

Getting it to open cleanly in Excel

Two settings matter. If your Excel is a European locale, set Column separator to semicolon — those versions use the comma as a decimal point and will put every row in one column otherwise. And set Line endings to CRLF, which is what Excel writes itself.

Other names for this

Also searched as “json to excel csv”, “convert json to spreadsheet”, “json array to csv”.

Questions

Why did my nested JSON produce columns with dots in the names?
That is the flattening: user.address.city is the path to the value. Switch “Nested values” to “Keep as JSON” if you would rather have the raw object in one cell.
My JSON is an object, not an array — what happens?
If the object contains an array of records, that array becomes the rows. If it is an object of objects it becomes one row per key. Otherwise you get a single row with one column per field.
Can I convert several JSON files at once?
Yes. Drop as many as you like, or drop a whole folder. Each becomes its own CSV keeping its original filename, and you can download them individually or as a ZIP.
Numbers with leading zeroes are being mangled.
That is Excel, not the conversion — the CSV holds the correct text. Import the file through Data → From Text/CSV and mark the column as Text rather than double-clicking the file.
Is my data uploaded anywhere?
No. The conversion runs as JavaScript inside this tab. Open your browser's Network panel and convert something — you will see no request carrying your data, because there is no server to send it to. You can also turn your Wi-Fi off and convert anyway.
How large a file can I convert?
There is no imposed limit — the ceiling is your device's memory. In our testing a desktop browser handles files up to about 2 GB and a phone up to about 400 MB before the tab runs out of memory. Files above a few hundred megabytes are noticeably slower because everything is held in RAM at once.