Convert JSON to CSV (or back) without Excel and without code
You have a JSON response from an API, but your client wants the data in Excel. Or the other way around: the accountant sent you a CSV spreadsheet and your app only accepts JSON. Doing it by hand? Half an hour and a fistful of typos. Opening it in Excel? It strips leading zeros, mangles dates and guesses the separator wrong.
Paste your data on the left, pick a direction (JSON → CSV or CSV → JSON) and copy the result. No upload, no account, no limits. Nested objects in JSON are flattened with dots (`user.name`, `user.address.city`), and arrays in values can be left as text or exploded into one row per element.
The CSV parser is RFC 4180 compliant: it understands quoted fields with commas inside, line breaks inside cells and the doubled-quote (`""`) escape. It auto-detects the separator (comma, semicolon, tab) and can optionally coerce `true`/`false` to booleans and `42`/`3.14` to numbers. Everything runs in the browser.
How to use it
- Pick the direction in the bar at the top: JSON → CSV if you have an array of objects to export, CSV → JSON if you want to load a spreadsheet into an app.
- Paste the input on the left. For JSON it is typically an array of objects (e.g. an API response), but a single object also works. For CSV the first row is usually the headers.
- For JSON → CSV: pick a separator (comma for the US and UK, semicolon for most of mainland Europe, tab for pasting into Excel), the quote style (minimal where required, or always) and whether you want a header row.
- For CSV → JSON: the separator is auto-detected (you can also force it), turn on smart parsing to keep numbers and booleans typed, or turn it off if you want everything as strings.
- Nested keys in JSON are flattened with dots: `{ "user": { "name": "Alice" } }` becomes a column `user.name`. It works the other way too, a column `address.city` in CSV builds a nested object on output.
- Arrays in values are controlled by a toggle: keep them as text (`["a","b"]` in one cell) or explode them into rows (each array element becomes its own row, other columns repeat).
- Copy the result with one click or download as a file (`.csv` or `.json`). The filename includes the date, so back-to-back exports do not overwrite each other.
When this is useful
Six situations where the converter replaces half an hour of fiddly work:
- Exporting API data to Excel for a client. The client wants a "March sales report" in Excel. The data lives in your API as JSON. You paste the response, pick comma as the separator, download the `.csv` and email it. Two minutes instead of writing an export endpoint.
- Loading the accountant's spreadsheet into your app. The accountant sends a list of invoices in Excel. Your app only accepts JSON through its import endpoint. Save the sheet as CSV, paste here, copy the JSON, paste into the importer. No custom parser needed.
- Migrating data between systems. The old CRM exports contacts as CSV, the new one imports JSON. You convert a thousand records in a second, glance at the preview to confirm the addresses are correctly nested (`address.street`, `address.city`), and upload.
- Working with API responses in a spreadsheet. You pull data from an API but want to filter it in Excel instead of writing another endpoint. Convert JSON to CSV, open in Sheets, add filters and a pivot table. No code.
- Preparing test fixtures for unit tests. You have sample data in Excel, but your tests expect JSON. Export to CSV, convert here with smart parsing on (numbers stay numbers, not strings) and paste into your `fixtures.json`.
- Cleaning data before a database import. You have a CSV with weird separators (semicolons, tabs) and special characters in quotes. The RFC 4180 parser handles it: convert to JSON, eyeball the result in the browser, then load into the database with confidence.