This tool runs entirely in your browser. Nothing you paste is uploaded.
How you can check →JSON to CSV
Turn an array of JSON objects into a CSV you can open in a spreadsheet. Nested fields flatten into dotted columns, and long numbers keep every digit.
The CSV appears here.
No network activity while you use this tool Show the numbers
- Requests to any other server
- 0
- Requests since you started typing
- —
Counted live by your browser's own Performance Timeline — the same data the DevTools Network panel reads. It cannot see what a browser extension does, and it is not meant to replace checking for yourself: here is how, in thirty seconds .
What this converter does
CSV is a grid: every row has the same columns, and every cell holds one value. JSON is a tree, and can nest to any depth. Converting one to the other therefore means deciding how a tree becomes a grid, and most of the difficulty is in the cases where that decision is not obvious. This page states its rules rather than hiding them.
Flattening
Each element of the top-level array becomes one row. A nested object contributes a column per
leaf, joined with dots — user.address.city. An array contributes a column per
item, with a bracket index — tags[0], tags[1]. Empty objects and
arrays are written as {} and [] rather than as blank cells, so
"present but empty" stays distinguishable from "not there". Turn flattening off and a nested
value is written as compact JSON inside a single cell instead, which is what you want when
the nested part is data you plan to parse again later rather than read.
Columns
The header is the union of every field name across every row, in the order each was first seen. This matters more than it sounds: real exports frequently have optional fields that appear for the first time thousands of rows in, and a converter that takes its columns from row one drops them without a word.
Quoting
A field is quoted when it contains the delimiter, a double quote, a line break, or leading or trailing spaces; quotes inside are doubled, per RFC 4180. Fields that need no quoting do not get any, which keeps the output readable and diff-friendly.
Numbers keep their digits
Values are written from the original text of your JSON, not from a JavaScript number. A 19-digit order ID or a high-precision decimal is copied across character for character. Any converter that parses to a native number first will round these — quietly, and in a way you will not notice until the IDs stop matching.
Spreadsheet gotchas worth knowing
-
A cell starting with
=,+,-or@is treated as a formula by Excel and Sheets. This tool warns rather than altering your values. - Excel needs a byte-order mark to read UTF-8 correctly on some platforms; the BOM option adds one. Leave it off for anything you will process with code.
- RFC 4180 specifies CRLF line endings, which is the default. Switch to LF if the file is headed for Unix tooling.
- Long numeric strings such as zero-padded codes may still be reformatted by the spreadsheet itself on opening — that is Excel, not the conversion.
Frequently asked questions
- How are nested objects turned into columns?
- Nested properties become dotted column names and array items become bracket indices, so {"user":{"name":"Ada"},"tags":["x"]} produces the columns user.name and tags[0]. That naming round-trips: feeding the CSV back through the CSV to JSON converter rebuilds the same shape.
- What if my rows do not all have the same fields?
- The header is the union of every field seen across every row, in first-seen order, and a row missing a field gets an empty cell. Taking the columns from the first row alone is the classic bug in this conversion — it silently drops any field that only appears later in the file.
- Will my long ID numbers survive?
- Yes. Numbers are written using the exact digits from your JSON rather than being read into a JavaScript number first, so a 20-digit Snowflake ID or bigint primary key comes out unchanged. Most converters round these silently.
- Why does it warn about cells starting with = or +?
- Excel and Google Sheets evaluate a cell beginning with =, +, - or @ as a formula, which is the basis of CSV injection attacks. This tool writes your values through unchanged rather than altering your data, and warns you so you can decide before opening the file in a spreadsheet.
- Does my data get uploaded?
- No. The conversion runs entirely in your browser, and the Download button writes a file directly from the page. Nothing is transmitted, stored or logged, so this is safe for production data.