Stop Doing This Wrong: Convert JSON to CSV Online Free
Oct 4, 2026 · AI-assisted
Most people who paste an API payload into a random converter and hit "download" end up with a CSV that has [object Object] in half the columns. That's not a formatting bug — it's a flattening problem, and it happens because nested JSON doesn't map cleanly onto rows and columns until you decide how deep to go. Here's how to do it properly, in your browser, without your data ever leaving your machine.
Why nested JSON breaks naive converters
A flat array of objects like [{"id":1,"name":"Ana"}] converts to CSV trivially. But real API responses rarely look like that. You get something closer to:
{
"order_id": 4471,
"customer": { "name": "Ana Ruiz", "email": "ana@example.com" },
"items": [
{ "sku": "A-19", "qty": 2 },
{ "sku": "B-04", "qty": 1 }
]
}
A converter that doesn't understand nesting will either stringify the whole customer object into one cell, or drop it entirely. Neither is useful if you're trying to load this into Excel or hand it to someone who lives in spreadsheets.
Flattening means turning customer.name into its own column header. When there's an array like items, you have to decide: one row per item, or one row per order with the items joined into a single cell? That decision is the whole job.
How to convert JSON to CSV online free in 5 steps
The JSON ↔ CSV Converter runs entirely in your browser using PapaParse and SheetJS. Nothing is uploaded. Here's the workflow:
- Paste or drop your file. You can paste raw JSON into the input box or drop a
.jsonfile directly onto the page. On the free tier, files up to about 25MB are fine. If you're working with a saved API response, just open it in a text editor and copy the contents. - Pick your direction. Choose JSON→CSV, CSV→JSON, or JSON→Excel (.xlsx). If the end goal is a spreadsheet someone will actually open, go straight to XLSX — you skip a step and avoid CSV encoding surprises.
- Let it flatten nested objects. The free version flattens nested JSON up to 10 levels deep, which covers the vast majority of API responses. Keys get joined with a separator (usually a dot), so
customer.namebecomes a column calledcustomer.name. - Check the preview before downloading. Look at the header row. If you see a column that should have been split, or an array that got collapsed into a single cell, that's your signal to adjust the input shape rather than fight the output.
- Copy or download. Grab the result as a file, or copy it straight to your clipboard if you're pasting into a ticket or a chat.
That's it. No account, no upload, no waiting on a server queue.
Handling arrays and deep nesting without losing rows
Arrays are where most conversions go sideways, and it's worth being deliberate about it.
- One row per array element. If
itemshas three entries, you get three rows, with the order-level fields repeated. This is usually what you want for analysis — it's the shape a pivot table expects. - Joined into one cell. If you'd rather keep one row per order, the array values get concatenated. Fine for a quick read, painful for filtering later.
- Deeply nested arrays inside arrays. This is where a 10-level flatten limit can bite. If your payload has arrays within arrays within arrays, the free tier may not reach the bottom. That's a real constraint, not a bug — and it's the main reason the Pro tier exists, since it handles deeper flattening and larger files up to 50MB with a progress indicator.
A practical tip: before converting, run a quick sanity check on your JSON. If the top level is an object rather than an array, wrap it in [ ] first. Most converters expect an array of records, and a single bare object sometimes produces a one-column mess.
When a command-line tool is the better call
Browser tools are great for one-off conversions, but they're not always the right answer. If you're converting the same shape of JSON every night, a script is better:
# jq flattens and converts in one line
jq -r '.[] | [.order_id, .customer.name, .customer.email] | @csv' orders.json > orders.csv
Or with Python and pandas:
import pandas as pd
pd.json_normalize(data, record_path='items', meta=['order_id']).to_csv('out.csv', index=False)
The trade-offs are honest ones. CLI tools are scriptable, repeatable, and handle huge files without a memory ceiling. But they require setup, they're awkward on a machine where you can't install packages, and if you're just trying to get one file converted before a meeting, writing a jq filter is slower than pasting into a browser tab. For anything involving sensitive customer data you'd rather not pipe through a third-party server, keeping it local in the browser is a genuinely good default — the same reasoning behind tools like the EXIF Remover for photos.
A few edge cases worth knowing
Encoding. CSV is just text, and Excel on Windows has opinions about UTF-8. If your data has accented characters or non-Latin scripts, export to XLSX instead of CSV — it sidesteps the whole issue.
Commas inside values. A proper CSV writer quotes fields containing commas or newlines. If you're hand-editing the output afterward, don't strip those quotes.
Empty and null values. Decide early whether you want empty strings or the literal text null. Most spreadsheet tools treat them differently, and it matters when you're filtering.
Duplicate keys. JSON technically allows them; most parsers keep the last one. If your source has duplicates, clean it before converting.
Batch work. If you have a folder of JSON files to convert, doing them one at a time in a browser gets tedious. The free tier handles single files; batch conversion of up to 10 files is a Pro feature, along with custom delimiters and fetching directly from an API URL.
If you want the privacy rationale in more detail, the privacy page spells out how browser-side processing works. And if you're generating test payloads to convert, the mock data generator pairs well with this workflow.
FAQ
Is it actually free to convert JSON to CSV online?
Yes. The JSON ↔ CSV Converter is free to use in your browser, with a roughly 25MB file limit and flattening up to 10 levels deep. There's an optional one-time Pro tier at $9.99 if you need larger files, deeper flattening, or batch conversion, but the free tier covers most everyday conversions.
Does my JSON file get uploaded to a server?
No. The conversion runs locally in your browser using PapaParse and SheetJS, so your data stays on your device. The only exception is the optional Pro feature that fetches from an API URL, which routes through a CORS proxy.
What happens to nested objects and arrays when I convert?
Nested objects get flattened into separate columns, typically joined with a dot — so customer.name becomes its own header. Arrays are the tricky part: depending on the tool's handling, they either produce one row per element or get joined into a single cell. Check the preview before downloading to confirm which shape you got.
Can I convert JSON straight to Excel instead of CSV?
Yes. The tool supports JSON→Excel (.xlsx) export directly, which is often the better choice if accented characters or non-Latin text are involved, since it avoids CSV encoding issues in Excel.
What if my JSON is nested more than 10 levels deep?
The free tier flattens up to 10 levels, which handles most API responses. If your payload goes deeper, the Pro tier supports deeper flattening, or you can pre-process the JSON with a script like jq or pandas before converting.
Can I convert CSV back to JSON with the same tool?
Yes. The converter works in both directions — CSV→JSON as well as JSON→CSV — so you can round-trip data if you need to move between a spreadsheet and an API-friendly format.