Free · No account · Browser-based

JSON to CSV converter

Turn nested data into a usable spreadsheet.

Work with nested objects, API exports and JSON Lines. Choose your rows and columns, then inspect the CSV before you save it.

JSON → CSVFictional records

NESTED JSON

[
  {"name":"Maya","location":{"city":"Bristol"}},
  {"name":"Leo","location":{"city":"Oslo"}}
]

CSV · FLATTENED FIELDS

name,location.city
Maya,Bristol
Leo,Oslo
DATA WORKSPACE
01
No comments or trailing commas
0 / 1,000,000 charsUTF-8 · 2 MiB max
Processed locally. Not uploaded.

Precision-aware parsing.
No conversion server, no automatic storage.

A table you can actually work with.

Inspect → choose rows → build. Preview values and columns before anything is copied or saved.

Convert JSON to CSV in three steps

  1. Add your data

    Paste JSON or import a UTF-8 .json, .jsonl, .ndjson or .txt file. Select JSON Lines for one record per line.

  2. Shape the table

    Inspect the input, choose a row source and build CSV. Select, rename and reorder columns; enabled headers must remain unique, including after protection.

  3. Review and save

    Review exported values and warnings, then copy or download. Input and settings edits invalidate old results: rebuild CSV before exporting again.

Choose rows, not the wrapper

Row source starts at Root; it never guesses. For this fictional response, select /data/items. Only those records become rows; wrapper metadata such as page is not exported.

{"data":{"items":[{"sku":"MAP","qty":2}]},"page":1}

Paths use RFC 6901 JSON Pointer: ~1 represents a slash in a key, and ~0 a tilde. Array expansion paths are relative to each row. Only detected paths are offered, not wildcards or JavaScript expressions.

Flatten fields or keep JSON cells

Flattening produces headers such as location.city. Special keys use escaped brackets to avoid collisions; __proto__ remains data. Disable flattening to retain nested objects as JSON cells. Arrays stay JSON by default; joining scalar arrays with the default | separator is not lossless. Complex arrays stay JSON.

Expand one selected array, such as /items, to repeat parent fields for each item. There is no Cartesian product across multiple arrays. Empty, missing or null expansion values keep one parent row. Null and missing cells default to blank; separate replacement settings help distinguish them, but CSV does not preserve JSON types.

Accepted input & practical limits

Strict JSON supports objects, scalar roots and heterogeneous arrays. Scalars use a deliberate (value) column; empty objects remain {} cells. An empty row array cannot convert. Duplicate keys are rejected even when identical. Comments, trailing commas and JSON5 are unsupported.

JSON Lines requires one complete JSON value per line: no blank interior lines or BOM; a final newline is allowed. Ordinary JSON accepts one leading BOM with a warning. Import reads local files, never URLs.

The table previews actual export-transformed values, initially 25 rows per page. Raw CSV preview stops at 50,000 characters; copy and download use the full result.

Limits and large inputs

Input: 2 MiB UTF-8 and 1,000,000 UTF-16 characters; depth 40; 200,000 tokens/nodes. Conversion: 10,000 output rows, 200 columns, 250,000 data cells, 4,000,000 field characters and 8 MiB output. Exceeding a conversion limit rejects the export, not silently truncates it.

Selectors list up to 60 row sources and 50 array paths per source, with 4,096-character paths and a 65,536-character combined selector-text budget. Headers allow 1,024 characters; null/missing replacements 100 each; join separators 32. Unpaired Unicode surrogates in exported fields are rejected rather than silently replaced. Column discovery can require choosing a smaller row source first. The cancellable worker has a 15-second deadline, not a speed promise.

Keep identifiers intact in Excel

Numbers retain their source spelling, including 9123372036854000123 and 2.370, without numeric arithmetic. Strings retain whitespace and decoded escapes. Excel can still remove leading zeros or retain only 15 significant digits.

Use Data → From Text/CSV → Transform Data. Set identifier columns to Text, replacing or removing the automatic Changed Type step before Close & Load. Quoting and a BOM do not force Text. See Microsoft's import guidance.

Delimiters, quotes and encoding

Comma, headers and CRLF are defaults; semicolon, tab (TSV), pipe, LF and quote-all are optional. RFC 4180 describes quoting fields with delimiters, newlines or quotes, and doubling embedded quotes. The optional UTF-8 BOM defaults on for downloads only; copy omits it.

Formula-risk protection, not a guarantee

Default-on protection checks text and exported headers for =, +, - or @, looking past leading control/whitespace and recognizing full-width equivalents. It prefixes an apostrophe, counts changed fields and leaves actual negative JSON numbers unchanged.

OWASP's CSV injection guidance explains why no sanitization works universally. Importers and save/reopen cycles can defeat protection; review untrusted data before opening it in a spreadsheet.

Local processing, deliberate sharing

No AI, conversion API or automatic workspace storage is used. Reload clears in-memory work, not copied text or downloaded files. Sitewide ads and analytics are separate: this is not a network-free-page guarantee. Read the Privacy Policy.

Frequently asked questions

Can I convert nested JSON and API responses?

Yes. Choose a detected row source such as /data/items, flatten nested fields or retain JSON cells, and optionally expand one array per row. Metadata outside that row source is not exported.

Does this support JSON Lines or NDJSON?

Yes. Select JSON Lines for one complete JSON value per line. Blank interior lines, a BOM, comments, trailing commas and duplicate keys are rejected; one final newline is allowed.

Will Excel keep leading zeros and long numbers?

The CSV preserves source number tokens, but Excel can reinterpret them. Import identifiers as Text before loading. Quotes and a UTF-8 BOM do not force text types.

What does formula-risk protection change?

It prefixes suspected formula-like text cells and exported headers with an apostrophe and reports the count. Actual negative JSON numbers are unchanged. This heuristic is not a universal spreadsheet-safety guarantee.

Is the converter free, and does it upload my data?

It is free with no account. Conversion uses a local worker, not AI or an upload API; work is not saved automatically. Sitewide analytics and ads operate separately.