JSON to CSV Converter
Free and online. Flatten nested objects to tidy columns, keep arrays as clean JSON cells, handle JSON Lines and varied schemas. The result is a tabular CSV ready for any spreadsheet or pipeline.
Prefer the full editor with cleanup tools? Open the app
When you'd convert JSON to CSV
- Importing API responses into a spreadsheet. APIs love JSON. Spreadsheets love CSV. Converting in between is the bridge most people end up walking.
- Feeding BI tools and warehouses. Most ingestion paths into BigQuery, Snowflake, or Looker take CSV (or Parquet). Flat JSON-to-CSV is the typical first step in productionising an API extract.
- Quick analysis of API output. A long JSON array is hard to scan. The same data as CSV opens in Excel or anywhere else and is immediately filterable.
- Sharing with someone who doesn't read JSON. JSON is fine for engineers. For most other people it's a wall of brackets. CSV is the lower common denominator.
- Diffing two API snapshots. JSON diffs are noisy because of formatting and ordering. Sorted CSV diffs reveal what actually changed.
Worked example: nested objects flatten with dot notation
An API response with a small nested customer object:
[
{ "order_id": 1001, "customer": { "id": 42, "name": "Acme Corp" }, "qty": 3 },
{ "order_id": 1002, "customer": { "id": 17, "name": "Beta Inc" }, "qty": 1 }
]
By default the CSV output flattens one level using a dot:
order_id,customer.id,customer.name,qty
1001,42,Acme Corp,3
1002,17,Beta Inc,1
If the customer object had its own nested address, you'd see customer.address.city and so on. The separator is always a dot, so rename the columns after download if your target needs underscores.
Format-specific gotchas
- Nested arrays stay in one cell. If a record has
tags: ["a", "b", "c"], this page keeps the array as["a","b","c"]in one cell. When you need one row per tag instead, the full editor's Unnest operation explodes the array and repeats the parent fields. - Heterogeneous schemas. JSON arrays often have records with different keys. We union the keys; missing values become empty cells. In the full editor, the column profile shows you which columns have null/empty and how often.
- JSONLines (NDJSON) vs JSON arrays. Both are detected automatically. JSONLines is preferred for streaming; one record per line means we don't have to parse the whole file at once.
- Type coercion across records. If half the records have
qty: 3(integer) and the other half haveqty: "3"(string), both write out as 3 because CSV cells are plain text. The mix only matters when a tool re-imports the file and sniffs column types, so it is worth normalising at the source if you can. - Booleans. JSON booleans become "true"/"false" in CSV. If your downstream wants 1/0 or Yes/No, change the column type before exporting.
- Ordering. JSON object keys aren't ordered by spec. The CSV column order follows the order keys first appear across your records. If you need a specific column order, reorder columns in the full editor before exporting.
How this differs from the alternatives
- vs CSVJSON (json2csv). Maintained by Flatfile. Has a flatten option, but the page is mostly an upsell for their enterprise importer and there's no preview of the resulting CSV inline. ExploreMyData shows the full schema and a real table preview before you export.
- vs ConvertCSV (json-to-csv). Feature-rich (custom delimiters, JSONLines support, date formatting), but the UI is dense and ad-supported, and processing slows on large inputs. ExploreMyData has a cleaner pipeline and no ads on the converter itself.
- vs Konklone (json to csv). Open-source and entirely client-side, with a live preview. The page itself warns that "extremely large files may cause trouble." ExploreMyData converts files up to 100 MB right on this page and hands anything bigger to the full editor's DuckDB-WASM engine.
- vs jq. Excellent CLI for extracting fields:
jq -r '.[] | [.a,.b] | @csv'. The friction is the install (Linux/Mac/Win all separately), and you have to hand-write the field projection plus pre-flatten any nested arrays. ExploreMyData handles flattening and missing keys automatically. - vs pandas (
json_normalize). Powerful, with explicit record/meta paths for complex nesting. Requires Python plus pandas, and you need enough familiarity to pick the right normalize options for your shape. ExploreMyData makes the common case point-and-click.
Frequently Asked Questions
How are nested objects flattened?
By default, nested keys are joined with a dot. {"user": {"id": 42, "name": "Alice"}} becomes columns user.id and user.name. The separator is always a dot, and anything nested deeper than four levels stays in the cell as JSON text.
What about nested arrays?
On this page the array stays as JSON inside one cell, so no data is lost and the row count stays predictable. If you want one row per array element, open the file in the full editor and apply the Unnest operation, which explodes the array and repeats the parent fields.
Does this support JSONLines (one JSON object per line)?
Yes. JSONLines and NDJSON files are auto-detected. Each line is treated as one record. Mixed-schema lines are unified by union of keys; missing keys become empty cells in the CSV.
What if rows in the JSON have different keys?
ExploreMyData unions the keys across all records and emits a column for each unique key. Records that don't have a particular key get an empty value in that column. You see the full schema in the full editor's column profile before exporting.
How are nulls represented?
JSON null becomes an empty CSV cell by default (the most common convention). Missing keys also become empty cells, so the two look the same in the output. Nothing in the converter tells them apart, so keep the JSON around if that distinction matters.
Is there a size limit?
Up to 100 MB on this page, with no row cap and no daily quota. Larger files belong in the full editor, which loads JSON through DuckDB-WASM and copes with far bigger arrays than a plain parser.
Related
Convert your JSON to CSV
No sign-up, no upload. Nested objects flatten cleanly and arrays stay as tidy JSON cells.
Open the full editor