Turn an API response into a spreadsheet.
Paste JSON and get a table. Nested objects become dotted columns like address.city, lists are joined or split into rows, and you choose which columns to keep. The CSV opens cleanly in Excel, Numbers and Google Sheets.
One order with two items can't fit in one row without a decision. Here's the same record three ways. Pick the one that matches what you'll do with the spreadsheet.
{ "order": "A-1001", "customer": { "name": "Ada Okafor", "city": "Leeds" }, "items": [ { "sku": "TR-10", "qty": 1 }, { "sku": "SK-02", "qty": 2 } ]}A CSV has no types, so Excel guesses. Each card shows what's in the file, what Excel displays, and whether our "protect for Excel" option would keep it intact.
JSON knows numbers, strings, true, false, null, arrays and objects. A CSV cell is only text. Converting is easy; reading it back means something has to guess the types again. Each value below is written to CSV the way this converter does, then read back by three typical readers. A row counts as surviving only if the value that comes back is exactly what went in.
JSON is precisely defined by RFC 8259 and ECMA-404. CSV only has RFC 4180, an informational description of common practice that many tools ignore. These are the rules that matter when converting between them.
application/jsonSpecRFC 8259 and ECMA-404, both 2017EncodingUTF-8 required between systems; no byte order markTypesobject, array, string, number, true, false, nullNumbersNo size limit in the grammar. RFC 8259 warns that only ±(2⁵³−1) is safe across systemsNot allowedNaN, Infinity, trailing commas, comments, single quotesKeysDuplicates are allowed by the grammar but behaviour is undefinedOrderObject members are unordered; arrays keep ordertext/csvSpecRFC 4180 (2005), informational onlyEncodingUnspecified; the charset parameter says. Excel needs a BOM to detect UTF-8TypesNone. Every field is textLine breaksCRLF between records; a final line break is optionalQuotingFields with commas, quotes or line breaks must be in double quotes; a quote inside is doubled ""HeaderOptional, signalled by header=present in the MIME typeDelimiterComma in the RFC; semicolon in many European locales; tab in TSVTools people use alongside this one.