JSON to CSV Converter

Convert a JSON array of objects to CSV with automatic header detection and delimiter choice. Paste JSON, download a spreadsheet-ready CSV. Nothing is uploaded.

Loading tool…

Worked examples

  • An array of flat records

    The everyday case: an API response that is an array of objects becomes a CSV with one header row and one data row per item.

  • Rows with a different set of keys

    Real-world JSON is often inconsistent between records; the converter unions every key into the header row and leaves missing fields blank.

  • Semicolon delimiter for a locale that uses comma as a decimal separator

    Spreadsheet software in many European locales expects semicolon-delimited CSV so commas in numbers aren't ambiguous.

What this converter does

This tool takes a JSON array of objects — the shape almost every REST API returns for a list of records — and converts it into a CSV table, the format spreadsheets, BI tools and data-import forms expect. It parses the JSON, collects every field name used across all the rows, and writes one CSV row per object with a header row listing the union of all fields.

When you need it

  • Turning an API response into a file you can open in Excel, Google Sheets or Numbers.
  • Preparing data for a CSV-only import form (CRM contacts, ad platform bulk uploads, analytics tools).
  • Handing a JSON export to someone who doesn't write code and just wants a spreadsheet.
  • Quickly eyeballing a list of records as a table instead of scrolling through nested braces.

Rules the converter applies

  1. The input must be a top-level array of flat objects — something like [{"id": 1, "name": "Ada"}, {"id": 2, "name": "Grace"}]. A single object, or an array containing anything other than objects, is rejected with an explanation.
  2. The header row is the union of every key across every row, not just the keys in the first row. Real-world JSON often has optional fields that only appear on some records, and this avoids silently dropping columns.
  3. Missing fields become empty cells. If a row doesn't have a field that another row has, its CSV cell is left blank rather than the row being skipped.
  4. Fields containing the delimiter, a quote character, or a line break are automatically quoted per the CSV standard, so a comma inside a text value doesn't get mistaken for a column separator.
  5. You can choose comma, semicolon or tab as the delimiter — semicolon is the convention in several European locales where comma is used as a decimal separator, and tab is common for pasting into spreadsheet apps directly.

What this tool does not do

Nested objects or arrays inside a row ({"id": 1, "address": {"city": "Berlin"}}) are not flattened into separate columns — they're written into the CSV cell as their literal JSON text. If you need address.city as its own column, flatten the JSON to a single level before converting, or expect the nested value to appear as a JSON string inside one cell.

Things to check after converting

  • Open the CSV in the target spreadsheet app and confirm the delimiter matches what that app expects by default — some regional Excel installations expect semicolons even for English-language files.
  • Numeric-looking values can be reinterpreted by Excel (leading zeros dropped, long IDs turned into scientific notation) — format the column as text on import if that matters.
  • Row count should match the length of your JSON array. Items that are not objects are rejected with an error rather than skipped.
  • Spreadsheet apps run cell text that starts with =, +, - or @ as a formula. The tool writes values exactly as they are, so if the JSON comes from untrusted users, sanitise those cells before opening the CSV in Excel or Sheets.
  • The output uses CRLF line endings, as RFC 4180 specifies, with no line break after the last row.

Limits

Input is capped at 2 MB of JSON text. Extremely wide tables (hundreds of distinct field names across rows) will produce a correspondingly wide CSV, which is valid but may be unwieldy to review directly in the browser.

Frequently asked questions

Is my JSON uploaded anywhere?
No. The conversion runs entirely in your browser; nothing is sent to a server.
What JSON shape does this tool expect?
A top-level array of flat objects, like [{"id":1,"name":"Ada"}]. Nested objects or arrays inside a row are not flattened; they are written into one cell as JSON text.
What happens if rows have different fields?
The header row is the union of every key seen across all rows; any row missing a field gets a blank cell for it.
Can I choose a different delimiter?
Yes — comma, semicolon and tab are supported, which covers the common regional spreadsheet conventions.