How to Convert JSON to CSV Online
Paste a JSON array of objects
Copy your JSON into the input box. The converter expects a top-level array where each element is an object, for example a list of records exported from an API or database. Each object becomes one CSV row.
Click Convert to CSV
The tool parses your JSON in the browser, collects every key seen across all objects to build the header row, and writes one data line per object. Values with commas, quotes, or line breaks are wrapped in double quotes and escaped automatically.
Review and copy the result
Check the CSV output, then use the Copy button to send it to your clipboard. Paste it straight into Excel, Google Sheets, or any spreadsheet app, or save it as a .csv file. Use Clear to reset both boxes for the next input.
What Each JSON Value Type Becomes in CSV
The converter walks every object in your array and maps each value to a single CSV cell. Knowing how each type is handled helps you predict the output before you convert.
| JSON value | CSV cell output | Notes |
|---|---|---|
| String | The text as-is | Quoted only if it contains a comma, double quote, or newline. |
| Number or boolean | Plain text (12, true) | Written without quotes. |
| null or missing key | Empty cell | Rows that lack a column key are left blank for that column. |
| Nested object | JSON string, such as {"city":"Rome"} | Serialized in one cell, not split into separate columns. |
| Array | JSON string, such as [1,2,3] | Kept as a single quoted cell. |
| Double quote inside text | Doubled to "" and the cell is quoted | Follows standard CSV escaping rules. |
Is This Tool Right for Your Data
Flat arrays of records
Ideal. An array of objects with simple string, number, and boolean fields converts cleanly, with one column per key and one row per object.
Objects with different keys
Supported. The header row is the union of all keys across every object, so records with extra or missing fields still line up, with blanks where a key is absent.
Deeply nested JSON
Works, with a caveat. Nested objects and arrays are written into a single cell as JSON text rather than expanded into their own columns. Flatten the data first if you need separate columns.
A single object or raw value
Not accepted. The input must be a JSON array. Wrap a lone object in square brackets, like [ { ... } ], so it is treated as a one-row array.
Common Problems and Fixes
"Input must be a JSON array of objects"
Your JSON parsed successfully but the top level is an object, string, or number rather than an array. Wrap your data in square brackets so it becomes an array, for example change { "id": 1 } to [ { "id": 1 } ].
"Invalid JSON" error
The text could not be parsed. Common causes are trailing commas, single quotes instead of double quotes around keys and strings, or unquoted keys. Paste the input into a JSON validator to find the exact position, then convert again.
Nested data shows as {"...":"..."} in a cell
This is expected. Sub-objects and arrays are stored as JSON text in one cell. To split them into individual columns, flatten the structure before converting, for example rename address.city to a top-level key named address_city.
Some rows have blank cells
Those objects do not contain that key. The converter builds columns from every key it finds across the whole array, so any object missing a key produces an empty value in that column. Add the key to those objects if you need a value there.