✦ tomai
Free · Developer Tools

JSON to CSV

Convert a JSON array of objects into table-ready CSV

JSON input
CSV output

What is a JSON to CSV converter?

A JSON to CSV converter turns structured JSON records into the flat two-dimensional table that spreadsheets, databases and most data tools import natively. The principle is simple: each object in an array becomes one row, the union of all keys across every object becomes the column set, and each cell is quoted only when it must be, with values holding the delimiter, a quote or a line break wrapped in quotes and inner quotes doubled, so a comma inside an address never splits a column.

Turning API exports into spreadsheet rows

  • Paste an API response shaped as an array of user objects and get an instant table for Excel or SQL import, with the header row listing every key found and a live row count in the status line, plus one-click copy or a direct download as output.csv.
  • Flip the flatten switch to expand nested objects into dot-notation columns, so a location object becomes its own location.country and location.city columns instead of one opaque JSON blob, which is what makes pivot tables and filters actually usable.
  • Pick the delimiter your spreadsheet expects, comma, semicolon, tab or pipe, since several European locales demand semicolons, and arrays of arrays are padded out to the widest row so ragged input still lines up.

Ragged keys, arrays and rejected inputs

  • A top-level number or string is rejected outright, only arrays and objects convert, and empty input reports empty rather than emitting a phantom table, while a single object is treated as a one-row table.
  • Objects with different key sets produce empty cells where a key is absent, nested arrays stay JSON-encoded inside one cell even with flatten on, and turning the header off still emits every data row, just without the label line.

Everything runs inside your own browser tab with no network requests of any kind, so pasting production exports is safe. Shut the tab and nothing of your data lingers anywhere but your own machine.

Last updated · 2026-09-01

How objects become rows and cells

The converter expects an array of objects and unions their keys into one header row:

  • Nested objects become dotted headers (user.name, user.email) instead of being dropped or stringified.
  • Arrays of primitives collapse into one cell joined by |; arrays of objects expand into indexed sub-columns.
  • A key missing in one row becomes an empty cell — column order follows the first object that declares it.

Flattening nested JSON into columns

⚡

Table-ready output

One click turns objects and arrays into clean RFC-style CSV that imports cleanly into Excel, Google Sheets, SQL and Python — no post-editing between formats.

🔒

Delimiter of your choice

Comma, semicolon, tab or pipe — pick the separator your spreadsheet locale or downstream tool needs, and every field is still quoted safely.

🎯

Nesting handled, not dropped

Nested objects flatten into readable dot-notation columns, so complex payloads become wide, useful tables instead of opaque JSON blobs.

Frequently asked questions

Which JSON shapes does it accept?⌄

Arrays of objects (the most common case), a single top-level object, and arrays of arrays (row-major data). Scalar values such as a plain string or number at the top level are rejected with a clear error, because a single scalar cannot form a table.

How does nested-object flattening work?⌄

When flattening is on, nested objects become dot-notation columns — {"user":{"name":"Ada"}} becomes the column header "user.name". Nested arrays are kept as JSON-encoded cell text. When flattening is off, each nested value is JSON-encoded into a single cell.

Is my JSON uploaded anywhere?⌄

No. Everything runs in your browser with plain JavaScript — you can paste confidential data freely; nothing is transmitted or stored.

What happens to deeply nested arrays of objects?⌄

They fan out into numbered columns (items.0.sku, items.1.sku) up to the widest row, which keeps every record importable in spreadsheets. If you would rather join them into one cell, flatten your JSON before converting — the dotted headers tell you exactly what will happen.

Related tools

Related tools