Converters JSON ⇄ CSV Converter

JSON ⇄ CSV Converter

Convert a JSON array of flat objects into CSV rows, or parse CSV back into JSON, for files up to 200MB.

Or convert a file directly — supports files up to 200MB

Drag & drop a file here, or click to browse

Processed in the background, so the page stays responsive even for huge files

How to use this tool

Choose JSON → CSV and paste an array of objects, or CSV → JSON and paste a table with a header row. The output follows your typing. For a large file, use the drop box under the editor: it converts in the background, up to 200 MB, and downloads the result without loading it into the page. When pasted CSV has a row with more cells than the header, the error names that data row, counting the first row under the header as 1.

Worked example: two customer records

[
  { "id": "004102", "name": "Asha Rao", "phone": "+919876543210",
    "note": null, "tags": ["vip"], "total": 1499.5 },
  { "id": "004103", "name": "Ravi, Jr.", "phone": "+919812345678",
    "coupon": "DIWALI10", "total": "=SUM(A1:A9)" }
]

becomes

id,name,phone,note,tags,total,coupon
004102,Asha Rao,+919876543210,,"[""vip""]",1499.5,
004103,"Ravi, Jr.",+919812345678,,,=SUM(A1:A9),DIWALI10
  • coupon exists only on the second record and still gets a column, at the end, where it was first seen.
  • "Ravi, Jr." is quoted because of its comma, and the array is written as JSON text with its quotes doubled.
  • null and a missing key both become an empty cell, so the CSV can't tell them apart.

Converting that CSV back to JSON gives "note": "" rather than null, and "tags": "[\"vip\"]": a string containing JSON, not an array. The IDs and phone numbers keep their zeros and plus signs.

Before opening the CSV in a spreadsheet

A value that starts with =, +, - or @ is written as it is, and Excel or Google Sheets will treat it as a formula. In the example, =SUM(A1:A9) shows up as a calculated number, not as text. If the JSON came from user input, such as a signup form or a support ticket, check those columns first, because a crafted formula can pull in data from other cells or open links. OWASP calls this CSV injection, and it applies to any CSV export, not just this one. The leading + is also why Excel shows +919876543210 as a number without its plus sign; import the file with the phone column set to Text if you need it intact.

If your records contain nested objects that you want as separate columns, such as address.city, use the Nested JSON ⇄ CSV (Flatten) converter instead.

Frequently Asked Questions

Which delimiter, quoting and line endings does the CSV use?

Commas between fields and a Windows-style line ending (CR LF) after each row. A field that contains a comma, a double quote or a line break is wrapped in double quotes, with any quote inside it doubled. Going the other way, the delimiter is detected automatically, so semicolon-, tab- and pipe-separated files convert without a setting.

What if my JSON objects have different keys?

The CSV gets one column for every key that appears in any object, in the order each key is first seen — so a field that only exists on the 500th record still gets its own column. Objects that lack a key get an empty cell there. Going back from CSV to JSON, those empty cells come back as empty strings rather than missing keys.

Does CSV → JSON guess data types, or is everything a string?

Only in two cases. A cell that is a plain number (like 42, -2.5 or 0.75, with no leading zero and at most 15 significant digits) becomes a JSON number, and true or false in any capitalisation becomes a boolean. Everything else stays the exact text from the file: 004102 keeps its zeros, +919876543210 keeps its plus sign, 1,200 keeps its comma, and a 20-digit order ID is not rounded. An empty cell becomes an empty string.

Related Tools

Related Blog Posts