JSON to CSV Converter
Turn JSON arrays into properly quoted CSV, with nested keys flattened, locally. 100% free, no signup. Everything runs in your browser.
Loading the tool…
Paste JSON, get CSV. This converter takes an array of objects (or a nested document, with a picker to select which array inside it you want), and produces clean CSV with proper quoting and escaping, column order preserved from the first object, and an optional flatten mode that turns nested keys into dot notation columns like address.city. Download the result as a .csv file or copy it straight to the clipboard for pasting into Excel or Google Sheets.
The conversion runs entirely in your browser and nothing you paste is ever uploaded, which matters more for this tool than almost any other I have built. JSON exports are routinely full of customer emails, order totals, and internal IDs, and that data has no business passing through a stranger's server just to become a spreadsheet.
How to use
- Paste your JSON into the input box, or drop a .json file onto the page.
- If the data is a plain array of objects, conversion starts immediately. If the array lives deeper inside the document, use the path picker to select it.
- Choose whether to flatten nested objects into dot notation columns, or leave nested values as compact JSON strings.
- Review the preview table to confirm the columns and the first few rows look right.
- Download the .csv file or copy the output to your clipboard.
- If something looks off, fix the source and re-paste. The converter points at the position where parsing failed.
Why use our json to csv converter?
CSV looks trivial and is not, which is why hand-rolled conversions break. Fields containing commas, quotes, or line breaks must be wrapped in double quotes with internal quotes doubled, and that is exactly what the format's specification, RFC 4180, prescribes. This converter follows it strictly, so a product description with a comma in it lands in one cell instead of shredding your columns.
Column order is preserved from the first object because that order usually carries meaning a human put there: id first, name second, the boring fields last. Objects later in the array that introduce extra keys get their columns appended rather than silently dropped, so nothing vanishes in the conversion.
Real-world JSON nests. An orders export has customer objects inside orders and address objects inside customers, and a spreadsheet has no rows-within-rows. The flatten option converts customer.address.city into a column of exactly that name, which keeps the lineage of every value legible. Where a value is an array, it stays as a compact JSON string you can still read, because inventing extra rows on your behalf is the kind of clever I try to avoid.
On privacy, I will repeat myself deliberately: nothing is uploaded. The parse, the flatten, and the CSV writing are plain JavaScript running in your tab. Paste a customer export with a clear conscience, and if you want certainty, load the page and cut your network connection first. The tool keeps working.
This converter also has natural neighbors on the site. The JSON formatter makes an unreadable API response inspectable before you convert it, the Excel to CSV converter covers the same journey from the other direction, and the text cleaner earns its keep scrubbing messy text fields before they go anywhere near a spreadsheet.
Who is this tool for?
API responses into spreadsheets. Product managers and analysts constantly receive JSON from developers and need it in Sheets by the 2 pm meeting. Paste, pick the array, copy, done.
Platform exports. Stripe, Shopify, and countless SaaS tools export JSON while finance wants CSV. This is the bridge, and the flatten option handles the nested customer and line-item structures those exports love.
Log and event triage. When you have a few thousand JSON events and a hunch, a spreadsheet with sortable columns beats scrolling raw JSON every single time.
One-off migrations. Moving data between tools that disagree about formats is half of small-business IT, and doing the conversion locally means the customer list never takes a detour through an unknown server.
Support and operations handoffs. When a ticket includes a JSON blob of a customer's order history, converting it to a table makes the pattern visible in seconds, and nobody has to squint at braces in the middle of an incident call.
Frequently asked questions
An array of objects is the ideal input, where each object becomes a row and each key becomes a column. If your document wraps the array deeper inside, like data.results, the path picker lets you select it without editing the JSON by hand.
Nested keys are joined with dots, so user.address.zip becomes a column named user.address.zip. The column names preserve the full path, and most databases and BI tools accept dot notation happily.
They are kept as JSON strings in a single cell rather than exploded into extra rows or columns. Expanding arrays multiplies rows and quietly changes what each row means, and I would rather hand you honest data than surprising data.
Yes. The output follows RFC 4180 quoting, uses standard comma delimiters, and includes a header row, which Excel, Google Sheets, and Numbers all parse cleanly. The download is UTF-8 encoded, so with older Excel versions and non-Latin characters you may need to import rather than double-click.
Only your browser's memory. Tens of thousands of rows convert in a blink on a normal laptop. Truly enormous exports of hundreds of megabytes may get slow, because the whole document is parsed in one pass.
Almost always invalid JSON: a trailing comma, single quotes instead of double quotes, or an unquoted key. Run the input through the JSON formatter first, which pinpoints the exact position of a syntax error.
No. Everything happens locally in your browser. No server receives your JSON, no analytics event contains your data, and the converter works with the network disconnected.

