JSON to CSV Converter

Paste JSON or open a .json file and get a CSV you can open in Excel or Google Sheets. Arrays of objects become rows, nested objects become columns, and long numbers stay exact. Everything runs in your browser; nothing is uploaded.

100% Private: JSON to CSV conversion happens in your browser. Your data never leaves your device and is never sent to any server.

Options
0 characters

Accepts a JSON object or an array. Nested objects become dot-notation columns (address.city). Numbers are copied exactly as written, so long IDs keep every digit.

Features

  • Arrays of objects become rows; nested objects become columns at any depth
  • Four ways to handle nested arrays
  • Comma, semicolon, tab or pipe delimiters
  • Header row and column-order options
  • Exact numbers: long IDs and decimals are never rounded
  • Excel-friendly UTF-8 BOM and formula-injection protection
  • Open .json files of any size your browser can handle
  • Copy, download and table preview

How to convert JSON to CSV, free and without uploading

To convert JSON to CSV, paste your JSON into the JSON Input box, click Open JSON File, or click Load Sample to try it. The CSV Output box appears about 0.25 seconds after you stop typing, with a table preview of the first 10 rows and the Rows, Columns and Output Size boxes. Arrays of objects become rows, and nested objects become dot-notation columns such as address.city. Click Copy, or Download CSV to save converted.csv, which opens in Excel and other spreadsheet programs. The built-in sample, 3 records in 721 characters of JSON, becomes a 297-byte CSV with 3 rows and 8 columns.

It runs in your browser; nothing is uploaded (you can check the Network tab in DevTools). Files chosen with Open JSON File are read on your device. There is no account and nothing to install.

JSON to CSV conversion flattens tree-shaped JSON into the rows and columns of a table. Each object in the top-level array becomes a row and each key path becomes a column. The numbers are read as text, so an ID such as 12345678901234567890 keeps every digit instead of being rounded to the nearest floating-point value.

To go the other way, use the CSV to JSON converter. Check the input first with the JSON validator or the JSON formatter, and see the same data in other formats with the JSON to XML converter and the JSON to YAML converter.

Table of Use: how JSON becomes CSV

JSON written in the input, the CSV the converter outputs and a note
In your JSONCSV outputNote
[{"a":1},{"b":2},{"a":3,"c":4}]a,b,c 1,, ,2, 3,,4Each object is a row; the header lists every key found, and a missing key leaves an empty cell
{"a":1,"b":{"c":2}}a,b.c 1,2A nested object becomes a dot-notation column, at any depth
"tags": ["developer","javascript","react"]developer|javascript|reactIn the first two Nested arrays options, plain values share one cell separated by |
The same tags with Nested arrays set to Numbered columnstags.0,tags.1,tags.2 developer,javascript,reactEach array item gets its own column; shorter arrays leave empty cells
{"order":1,"items":[{"sku":"A","qty":2},{"sku":"B","qty":1}]}order,items.sku,items.qty 1,A,2 1,B,1One row per array item repeats the parent fields for each object in the array
{"big":12345678901234567890,"d":1.50,"e":1e3}big,d,e 12345678901234567890,1.50,1e3Numbers are copied as written, so nothing is rounded or reformatted
true, false, nulltrue, false, (empty)null becomes an empty cell
"he said \"hi\"", "x,y""he said ""hi""","x,y"A cell with a quote, the delimiter or a line break is quoted, and inner quotes are doubled
"@x" and "-5"'@x and -5With Block spreadsheet formulas on, text that could run as a formula gets an apostrophe; plain numbers do not
[[1,2,3],[4,5,6]]column1,column2,column3 1,2,3 4,5,6An array inside the top-level array becomes a row of positional columns

Features

  • Four ways to handle nested arrays. One row per array item, one cell with the values joined with |, numbered columns, or the array kept as JSON text. The row-per-item mode expands arrays of objects and joins arrays of plain values.
  • Delimiter choice. Comma, Semicolon (European Excel), Tab or Pipe. Choosing Tab changes the button to Download TSV and the file extension to .tsv.
  • Header and column order. Tick or untick Include header row, and order the columns as they appear in the JSON or alphabetically from A to Z.
  • Exact numbers and key order. A strict JSON reader replaces JSON.parse, so large integers and decimals such as 1.50 are not changed, and keys such as 2 and 1 stay in document order.
  • Errors with a position. Invalid JSON is reported with its line and column, for example a trailing comma at line 1, column 9.
  • Spreadsheet-friendly. A UTF-8 BOM is added to downloads by default, and Block spreadsheet formulas (=, +, -, @) guards against CSV injection.
  • Preview and statistics. A table preview shows the first 10 rows, and the Rows, Columns and Output Size boxes give the exact counts. The download takes the name of the file you opened.

How to use the JSON to CSV converter

  1. Paste your JSON into the JSON Input box, click Open JSON File, or click Load Sample. Click Clear All to start again.
  2. Choose a Delimiter: Comma (,) - standard CSV, Semicolon (;) - European Excel, Tab - TSV or Pipe (|).
  3. Set Nested arrays and Column order, and tick or untick Include header row.
  4. Leave Add UTF-8 BOM to download (for Excel) ticked for Excel, and tick Block spreadsheet formulas if the data comes from people you do not know.
  5. Check the CSV Output, the table preview and the Rows and Columns counts.
  6. Click Copy, or Download CSV (Download TSV for tab-separated).

Who can use it

  • Developers turning an API response into a file a colleague can open in a spreadsheet, after checking it in the JSON formatter.
  • Analysts and operations teams who need an export from a tool that only offers JSON, so they can sort and filter it, and compare two exports in the text diff tool.
  • Data engineers preparing a flat file for a database import, with the XML to JSON converter or the YAML to JSON converter for other source formats.
  • Support teams handling customer data, which stays on their own device while it is converted.

FAQs

How do I convert JSON to CSV?

Paste your JSON into the JSON Input box, click Open JSON File, or click Load Sample to try it. The CSV Output box appears about 0.25 seconds after you stop typing, with a table preview of the first rows. Choose a Delimiter and the other options, then click Copy, or Download CSV to save converted.csv.

How are nested objects and arrays converted?

Nested objects become columns named with dot notation, so address.city holds the city inside address, at any depth. For arrays, Nested arrays offers one row per array item, one cell with the values joined by |, numbered columns such as tags.0, or the array kept as JSON text. Arrays of plain values are joined by | in the first two modes.

Will the CSV open correctly in Excel?

Yes, in most cases. Downloads start with a UTF-8 byte order mark, which Excel uses to show accents and non-Latin text correctly; untick Add UTF-8 BOM to download if another program needs a file without it. If your Excel expects a semicolon as the list separator, choose the semicolon delimiter. Excel itself keeps 15 significant digits, so a longer ID shows rounded unless you import that column as Text.

Are numbers or values changed during conversion?

Numbers are copied exactly as written, so 12345678901234567890 keeps every digit and 1.50 keeps its trailing zero; JSON.parse in a browser would round the first and shorten the second. The words true and false are written as text, null becomes an empty cell, and a value containing the delimiter, a quote or a line break is wrapped in quotes with inner quotes doubled.

What does Block spreadsheet formulas do?

A cell that starts with =, +, - or @ can be run as a formula when a spreadsheet opens the file, which is known as CSV injection. With this option on, such text gets a leading apostrophe so it displays as plain text. Plain numbers such as -5 are left alone. Turn it on when the JSON comes from users or other sources you do not control.

Why does it say my JSON is invalid?

The converter reads strict JSON, so comments, single-quoted strings, trailing commas and unquoted keys are errors, and the message names the line and column. The top level must be an object or an array, and a lone value such as 42 is rejected. An empty array, or JSON with no values at all, shows a message asking for an array of objects.

Is there a limit on rows or file size?

The tool sets no limit on file size beyond what your browser can hold, but it stops at 200,000 rows and shows an error instead of freezing the page. Split a longer array into parts to stay under the cap. If the rows come from expanding nested arrays, a Nested arrays option such as Keep as JSON text creates fewer. The error message mentions Nested arrays even for a flat list.

Is my JSON uploaded to a server?

It runs in your browser; nothing is uploaded (you can check the Network tab in DevTools). The JSON is parsed and converted by a script that ships with the page, and files chosen with Open JSON File are read on your device. Nothing is sent to ZipConvert or anyone else, so it is safe for customer lists and other private data.