Convert JSON arrays, API responses or JSON Lines to CSV. Nested objects flatten to dot columns, arrays join or split, and quoting stays Excel-safe.
A flat list of identical objects is the easy case. Real JSON is rarely that tidy: one record has a key the others lack, a customer is an object inside the order, the items are an array, and somebody's note contains a comma. The JSON to CSV Converter handles each of those explicitly, so the file opens in Excel or Google Sheets with every value in the right column.
It accepts a JSON array, a single object, a whole API response or JSON Lines, one record per line. With an API response it looks for the first array of records, such as data.users, says where it found it, and leaves out the paging fields around it.
The page opens on three orders, 614 bytes of JSON. They become 287 bytes of CSV with 3 rows and 8 columns:
customer is flattened into customer.name and customer.city.["notebook", "fountain pen"] becomes notebook; fountain pen in one cell.Leave at gate, ring twice is wrapped in quotes because of its comma, and Tomás "Tom" Ferreira is written with doubled quotes, as RFC 4180 requires.giftWrap appears only in the third order, so the first two rows leave that column empty, and null becomes an empty cell too.Switch Arrays to One column each and the items spread into items.0 and items.1. Keep as JSON writes the array as text instead.
Cells are quoted only when they need it: a delimiter, a double quote, a line break, or leading or trailing spaces. Quote every value forces quotes everywhere for strict importers. Choose a Semicolon for European Excel, where the comma is the decimal separator. A Tab downloads as a .tsv file.
UTF-8 BOM for Excel adds three invisible bytes to the downloaded file. Without them, Excel on Windows shows Tomás as garbled characters. Windows line endings switches LF to CRLF. A multi-line value stays inside its quoted cell rather than breaking the row.
Spreadsheets run a cell that starts with =, +, - or @ as a formula, which is how CSV injection works. Formula guard puts an apostrophe in front of those cells. On the fourth sample it marks 5 cells, including =1200+300 and @tanaka_studio. It also marks phone numbers such as +44 20 7946 0321, which is why it is off by default.
Broken input gets a position rather than a guess: “That isn't valid JSON — the parser stopped at line 1, column 10.” A bare number is refused, an empty array reports that there are no rows, and files over 10 MB are refused to keep the tab responsive. The table preview shows the first 100 rows; the CSV always contains all of them.
Table preview
| orderId | placed | customer.name | customer.city | total | items | note | giftWrap |
|---|---|---|---|---|---|---|---|
| ORD-10421 | 2026-03-14 | Priya Nair | Kochi | 84.5 | notebook; fountain pen | Leave at gate, ring twice | — |
| ORD-10422 | 2026-03-14 | Tomás "Tom" Ferreira | Porto | 129 | desk lamp | — | — |
| ORD-10423 | 2026-03-15 | Hana Kobayashi | Osaka | 42.75 | — | — | true |