JSON to CSV Converter

Paste JSON (array of objects) below and get CSV output instantly.






The formula

Input must be a JSON array of objects
Header row = the union of keys across every object, in first-seen order
Each row = the value for each header, or empty when the key is missing
A field containing a comma, a quote or a line break is wrapped in double quotes, and inner quotes are doubled
Union of keys
Objects do not have to share the same keys. Any key present on any object becomes a column, and objects lacking it get an empty cell.
Quoting
Follows the usual CSV convention, so values containing separators survive a round trip into a spreadsheet.
null and undefined
Written as empty cells rather than the literal text null.

Worked example

Converting a small array with a missing key and a value containing a comma.

Three columns, two rows, with the comma-bearing value safely quoted and the missing cells left empty.

The input has to be an array at the top level

A single object on its own, or an array wrapped inside a container object, both return nothing usable. If your data looks like {"results": [ ... ]}, extract the inner array first — paste just the part starting at the opening square bracket. This is the most common reason the converter reports that it cannot find an array of objects.

Nested objects and arrays do not flatten

A value that is itself an object or an array is converted with the same string coercion as everything else, so a nested object becomes the text [object Object] and a nested array becomes its comma-joined contents. Flatten your data before converting if it has depth — turning {"address":{"city":"X"}} into {"address_city":"X"} first is the reliable route.

Numbers stored as text can change meaning in a spreadsheet

CSV carries no type information, so a spreadsheet re-interprets each cell on import. Values with leading zeros, long digit strings and anything that resembles a date are the usual casualties — a postcode or an identifier can lose its leading zero or be reformatted entirely. If that matters, import the file rather than opening it directly and set the affected columns to text at the import step.

Everything happens in your browser

The JSON is parsed and converted locally and the download is generated from the text on the page. Nothing is uploaded to a server, which is what makes it safe to use on data you would not want to send anywhere. The parse error message, when the JSON is malformed, comes from the browser’s own parser and usually names the exact character position of the problem.

Common questions

What JSON structure does the converter need?

An array of objects at the top level, like [{"a":1},{"a":2}]. Objects do not need identical keys — every key found anywhere becomes a column and missing values are left blank. A bare object or an array nested inside another object will not convert until you extract the array.

What happens to values that contain commas?

They are wrapped in double quotes, and any double quote inside the value is doubled, which is the standard CSV escape. Values containing line breaks are handled the same way, so the file opens correctly in a spreadsheet.

Why does my nested data show as [object Object]?

Because CSV is flat and has no way to represent nesting. Values that are themselves objects are converted to text using the default string conversion. Flatten nested structures into separate top-level keys before converting.

Is my data uploaded anywhere?

No. Parsing, conversion and the file download all happen in your browser. The data never leaves the page, which is why it is safe to use on records you would not paste into a hosted service.

Get tools like this in your inbox
One useful tool per week. No spam. Unsubscribe anytime.
Tools Pro — $9 a month

One licence key, pasted into any CYZOR tool. Today it does three things: drops the CYZOR line from PDFs you send for signature, takes CYZOR branding off your forms and adds CSV export, and switches on the AI rewrite in the resume builder.

See Tools Pro

Terms · Privacy · Refund · Contact