Convert JSON to CSV
Turn API responses, exports and JSON Lines into a CSV that opens cleanly in Excel — the records found for you, nested fields flattened into readable columns, and large IDs kept digit for digit.
- Processed on your device
- No upload, no waiting
- No signup, no watermark
How it works
Add JSON
Drop a .json or .jsonl file, or paste the JSON straight into the box.
Pick the records
The list of records is found automatically, even deep inside data.items. Choose how arrays are written and check the preview.
Download
A CSV with the delimiter and encoding you need, ready for Excel, Google Sheets or a database.
Frequently asked questions
How does nested JSON become columns?
Each nested field becomes one column named by its path: {"address": {"city": "Oslo"}} gives a column address.city. Columns appear in the order they first occur in your data, not alphabetically, and records missing a field simply leave that cell empty.
What happens to arrays?
You choose: join the values into one cell ("red; green"), spread them across numbered columns (tags.0, tags.1), keep them as JSON text, or — for an array of objects such as order lines — write one row per item with the parent fields repeated.
Are large numbers kept exactly?
Yes. IDs beyond what JavaScript can represent — Twitter, Discord and 64-bit database IDs — are copied digit for digit, where most converters silently round 1234567890123456789 to 1234567890123456800.
Is JSON Lines (NDJSON) supported?
Yes. A file with one JSON object per line is recognised automatically, and every line becomes a row.
What if my JSON has an error?
You get the exact line and column with the offending text highlighted, and a plain explanation — for example a trailing comma, or single quotes copied from JavaScript code.
Is my data uploaded?
No. The JSON is read and the CSV written entirely in your browser; nothing is sent anywhere.
Good to know: Only one array of objects can be expanded into rows at a time; other arrays are written into their cell. Very large files are limited by your browser's memory.