JSON to CSV Converter

Convert JSON records live to CSV or TSV with selected column order, formula protection and local file export.

Up to 1 MB and 100,000 characters. You can also paste or edit text below.
Separate exact property names with | to select and reorder them. Leave blank for all columns. Property names containing | cannot be selected separately.
Conversion options
Some spreadsheet importers use the BOM to recognize UTF-8. It is not added to copied text.

Files and text are processed locally in your browser and are not uploaded.

Records
2
Columns
2
Page guide

How to use this tool

  1. Upload a JSON or TXT file, or paste JSON.
  2. Choose a delimiter and optionally select columns in the required order, separated by |. Keep formula protection enabled for spreadsheet output.
  3. Valid input updates after a brief typing pause. You can also use the main action button. Resolve errors before copying or downloading.
  4. Clear input keeps the conversion settings; Undo input change restores the previous inputs after clear or reverse. Reset restores the example and default settings.

Understanding the output

The header contains every distinct key in first-seen order. Missing properties and null values become empty cells. Nested arrays or objects are serialized into a JSON string inside their cell; they are not expanded into separate columns.

Records with different fields

For [{"a":"x,y"},{"b":2}], the header is a,b. The first row contains a quoted x,y value and an empty b cell; the second row contains an empty a cell and 2. For [{"a":1,"b":2}], selecting b|a produces b,a followed by 2,1 with the chosen line ending.

Choose a table shape deliberately

JSON can represent nested and irregular structures, whereas a CSV table has a fixed set of columns. Combining keys is convenient for records with optional fields, but deeply nested data may be better flattened in your application first. This converter preserves a nested value as a JSON string so that it is visible instead of silently discarding it.

CSV does not carry reliable type information. An empty cell cannot distinguish a missing property from a null or an empty string after export. If these differences matter, keep the original JSON as the authoritative representation.

Consider how a spreadsheet will interpret cells

Some spreadsheet applications treat strings beginning with characters such as = or + as formulas. The optional protection prefixes formula-like text with an apostrophe, including suspicious leading whitespace. This changes the exported text intentionally. It reduces a common risk but is not a universal security guarantee: import settings and spreadsheet behavior differ, so inspect untrusted exports before opening them.

CSV and TSV export settings

Comma is the default separator. Semicolon, tab and pipe output use the same quoting rules whenever a cell contains the chosen separator, a quote or a line break. Column names are included by default and can be omitted for an importer that already knows the column order.

CRLF line endings are the default; LF is available for Unix-oriented workflows. The download contains UTF-8 text. The optional byte-order marker is added only to the downloaded file, leaving copied text unchanged. Tab-separated output downloads with a .tsv extension.

Method and supported input

Native JSON parsing reads the array. A union of object keys creates the column order. Serialization quotes cells containing the chosen delimiter, quotes or line breaks, doubles internal quotes, and joins records with the selected line ending.

File input accepts UTF-8, or UTF-16 with a byte-order marker, and is processed locally. Copy and download use the current converted result; valid input and setting changes update automatically.

A blank column selection retains the union of keys in first-appearance order. Selected names are trimmed, must exist and cannot repeat. Missing properties remain empty cells.

  • Each array item represents one record.
  • Native JavaScript number precision is sufficient for the input.

Limitations

  • Duplicate JSON keys and very large numeric precision are not preserved. Numbers outside JavaScript’s finite numeric range are rejected.
  • The tool accepts at most 10,000 records and 200 columns.
  • Input is limited to 100,000 characters and file import to 1 MB. XLS/XLSX files are not supported; download delimited text for a spreadsheet importer.
  • Column selection trims names and uses | as its separator; names with literal | or surrounding spaces can only be included through the automatic all-column output.

Common questions

Will nested objects become separate columns?

No. They become JSON text inside a single CSV cell.

Why did an apostrophe appear before a value?

Spreadsheet protection prefixes formula-like strings. Turn it off only when you need exact text and understand how the destination handles it.

Can I export tab-separated data?

Yes. Choose Tab (TSV) as the delimiter. Copy returns tab-separated text and the download uses a .tsv filename.

Are my JSON files uploaded?

No. Files are read and converted in your browser. You can edit the imported text before converting again.

Sources and further reading

Reviewed on