DevKit
Converter

JSON to CSV Converter

Convert JSON arrays to CSV format for spreadsheet use.

Last updated: August 2026

Share:

Was this tool helpful?

Turning structured data into a spreadsheet

JSON and CSV solve different problems. JSON stores nested, typed data and is what APIs speak; CSV is a flat grid of rows and columns that spreadsheets and many analytics tools expect. Converting JSON to CSV means mapping a list of objects into a header row plus one data row per object, so a non-technical colleague can open the result in Excel or Google Sheets.

The clean case is an array of flat objects that all share the same keys. The keys become the column headers, and each object becomes a row.

[
  { "id": 1, "name": "Ada",  "role": "admin" },
  { "id": 2, "name": "Grace", "role": "user" }
]

Converts to:

id,name,role
1,Ada,admin
2,Grace,user

The nested-data problem

Real JSON is rarely flat. CSV has no concept of a nested object or array, so the converter has to flatten. A common approach joins nested keys with a dot:

[{ "id": 1, "address": { "city": "Jakarta", "zip": "10110" } }]

id,address.city,address.zip
1,Jakarta,10110

Arrays inside a record are messier: you either join them into one cell or expand them into multiple rows, and the right choice depends on how you will use the file.

Questions people hit

What if objects have different keys? The converter should collect the union of all keys as the header and leave an empty cell where a record lacks a value. If it only uses the first object, later records can silently lose columns, so check that behavior on uneven data.

How are commas and quotes inside a value handled? CSV escapes them by wrapping the field in double quotes and doubling any internal quote. A name like Smith, Jr. becomes "Smith, Jr.". Without that escaping, the comma would be read as a column break and shift every following field.

Why do my numbers lose a leading zero? Spreadsheets interpret CSV cells, so a zip code like 01234 can be read as the number 1234. That is the spreadsheet, not the conversion. Keep such values as text, or import with the column typed as text.