JSON to CSV
Convert an API response into columns and rows. The header is the union of every key in the array, so records that omit a field still line up, and nested objects are flattened one level into dotted column names. Cells that spreadsheet software would execute as a formula are neutralised on the way out.
An address object becomes address.city and address.postcode columns.
Only needed for tools that misread bare values as a type or as a formula.
Prefixes a cell starting with =, +, - or @ with an apostrophe so spreadsheets show it as text.
How json to csv works
- Paste the JSONAn array of objects gives the best result; anything else is adapted and the difference is reported.
- Set the output shapePick the delimiter, decide whether to flatten nested objects, and choose the line ending.
- Download or copyThe CSV is quoted per RFC 4180, so a value containing a comma or a newline stays in one cell.
What you get
Turn a JSON array of records into a spreadsheet-ready table. Everything happens inside this page: the file is read by your browser, transformed in memory and handed straight back to you as a download. There is no upload queue, no waiting for a server, and nothing left behind when you close the tab.
Supported formats
This tool works on text you paste or type, so there is no file format to worry about. Nothing you type is sent anywhere.
Limitations, stated up front
- Only one level of nesting is flattened. Deeper objects and all arrays are written as JSON text inside the cell.
- Column order follows the first appearance of each key, so it is the union of the array rather than any one record.
- A CSV has no types. Everything round-trips as text, so a number in JSON comes back as a string unless you convert it deliberately.
Frequently asked questions
What happens to values that will not fit in a cell?
They are written as JSON text. An array of numbers becomes [1,2,3] and a nested object that flattening did not reach becomes {"a":1}. A cell holds one value, so something has to give, and preserving the data in a form another tool can parse is more useful than dropping it or rendering it as a set of made-up columns.
Why are some cells prefixed with an apostrophe?
Because a cell beginning with =, +, - or @ is executed as a formula by Excel, Sheets and LibreOffice. A name like a HYPERLINK formula in a customer list is a real attack, and the apostrophe forces the spreadsheet to treat it as text. Turn the option off if you are exporting for a program rather than a person.
What if my array mixes objects and plain values?
Furtu says so and puts the plain values in a column called value. The alternative — dropping them — loses data, and the alternative of guessing a column name would be a lie about the shape of the input.
Does it handle a single object rather than an array?
Yes, as a one-row table, because that is almost always what was wanted. A bare string, number or boolean becomes a single cell.
Are the records in my JSON uploaded?
No. The conversion runs locally. When the records are customer or user data, that is the difference between a tool you can use and a tool you cannot.