Tool

Online JSON to CSV converter

Convert JSON to CSV or TSV with exact numbers and optional formula protection.

Your data is processed locally in your browser and is not sent to our servers.

Shortcut: Ctrl or ⌘ + Enter
Read only · CRLF rows
CSV options

Protection prefixes text that a spreadsheet could execute as a formula with an apostrophe. Disable it only if you need to preserve those strings exactly.

Enter a JSON object or an array of objects to create CSV.

Verifiable example

This array contains two rows with properties that do not always appear in the same object:

[
  { "id": 1, "name": "Ada", "active": true },
  { "id": 2, "name": "Linus", "note": "contains, comma" }
]

With the comma separator, the tool gathers the columns in order of first appearance and produces:

id,name,active,note
1,Ada,true,
2,Linus,,"contains, comma"

The note is quoted because it contains the separator. A missing property produces an empty cell.

How it works

Paste a JSON object or an array of objects and press Convert to CSV, or use Ctrl/⌘ + Enter. A single object produces one row; an array produces one row per object, in the original order.

Top-level properties form the header. If a property first appears in a later row, its column is added at the end. The output uses CRLF row endings and can separate fields with commas, semicolons, or tabs.

You can copy the result or download a .csv file. The download includes a UTF-8 byte order mark (BOM) to help compatible spreadsheets recognize accented letters and other Unicode characters. The displayed and copied text does not include the BOM.

Nested objects and arrays

The tool does not flatten nested properties. A convention like profile.name could be confused with a literal key that already had that name. Instead, nested objects and arrays are preserved as compact JSON within a cell:

[{ "id": 1, "profile": { "team": "data" }, "roles": ["admin"] }]
id,profile,roles
1,"{""team"":""data""}","[""admin""]"

The nested structure remains in that cell, so you can decide how to process the column later. CSV still does not preserve the types of top-level scalar values.

CSV separators and escaping

  • Comma: usual and default option.
  • Semicolon: useful for applications or locales that expect it.
  • Tab: generates tab-separated values (TSV) that many editors and spreadsheets can import.

A field is enclosed in double quotes when it contains the separator, quotes, line breaks, or leading or trailing whitespace. Inner double quotes are doubled. These rules also apply to the header.

Spreadsheet protection

A spreadsheet can interpret a string beginning with =, +, -, or @ as a formula. Protection is enabled by default and prefixes those strings with an apostrophe, including when spaces, tabs, or line breaks precede the formula character. Negative JSON numbers are not modified; a string such as "-12" is.

You can disable the option if you need to keep those strings exactly, but review untrusted CSV before opening it in a spreadsheet. Protection also applies to potentially executable column names. It changes the underlying text and is not a universal guarantee across spreadsheet applications or re-imports; see the safe JSON-to-CSV workflow.

Common errors

  • Scalar root: a string, number, boolean or null does not define columns.
  • Mixed array: every element must be an object; do not mix objects with numbers, strings, or other arrays.
  • Empty array: does not allow deducing a header or creating rows.
  • No columns: {} or an array containing only empty objects has no fields for a header.
  • Duplicate keys: different JSON readers can keep different values, so resolve repeated names before converting, including in nested objects.
  • Trailing commas or comments: are not part of strict JSON.

Syntax errors show line and column when the browser can determine them. To review the document without transforming it, use the JSON validator.

Types, precision and empty cells

  • Strings, booleans and numbers are written as CSV text.
  • Large integers keep all their digits and numbers keep their original notation.
  • null, a missing property and an empty string produce an empty cell; CSV does not by itself preserve the difference between those three cases.
  • Objects and arrays are compactly serialized without converting their numeric tokens through floating-point arithmetic.
  • Row order is preserved; column order follows the first appearance of each property. CSV does not retain JSON types.

When importing, set column types in the destination application if you need to prevent it from changing long identifiers, dates, or leading zeros.

Safety limits

  • Maximum input of 1,000,000 characters.
  • Up to 100 nesting levels.
  • Up to 10,000 rows, 250 columns and 500,000 cells.
  • Maximum output of 2,000,000 characters.
  • The names __proto__, constructor and prototype are treated as text; the table uses lists, sets and maps, not assignments on objects with shared prototype.

Frequently asked questions

Can I convert a single object?

Yes, provided it has at least one property. Its properties form the header and its values produce a single row. For multiple rows use an array of objects.

Why aren’t objects automatically flattened?

There is no single safe convention for naming, arrays, or collisions. The tool preserves nested JSON in a cell to avoid an ambiguous or destructive transformation.

Is my data sent to a server?

No. Validation, column creation and CSV escaping are executed in this tab. The input is not saved or recorded; closing or reloading the page clears it.

Reviewed on by Tools in a Tab.