JSON to CSV Converter (and CSV to JSON)

Turn a JSON array into a spreadsheet-ready CSV or paste CSV and get clean JSON back, quoted fields, commas and line breaks handled properly.

Direction
Arrays of objects

Free forever, no sign-up and no limits, and this tool installs on its own so you can keep it on your home screen.

Paste a JSON array and get spreadsheet-ready CSV, or paste CSV and get clean JSON objects back. Nested objects flatten into dotted columns like user.address.city, a live preview shows the first rows before you copy, and quoted fields, embedded commas and line breaks are handled properly, the cases where naive converters silently corrupt data.

How to use it

  1. Pick the directionJSON to CSV for spreadsheets; CSV to JSON for code and APIs.
  2. Paste the dataFor CSV bound for Excel, consider the semicolon delimiter for much of Europe and the BOM option when values carry accents.
  3. Check the preview, copyThe preview table and the rows × columns summary confirm the shape before the data goes anywhere important.

The bridge between code and spreadsheet

JSON is how systems exchange lists; spreadsheets are how humans inspect them. The gap between the two is crossed constantly, an API export that finance wants as a sheet, a colleague's spreadsheet that a script needs as objects, and it is crossed badly constantly, because CSV looks simple enough to hand-roll. The corner cases are where data dies: a customer named "Smith, John", a product description with a line break, a note containing quotes.

This converter implements the actual CSV rules in both directions, so those fields survive intact. The rows-and-columns summary above the result is the quick sanity check: if 500 objects became 512 rows, something in the data needed quoting that the source never applied.

Columns from ragged data

Real JSON arrays are ragged, later objects carry fields early ones lack. Taking the columns from the first object, as quick scripts do, silently discards every field it did not have. Here the header is the union of all keys in first-seen order: nothing is dropped, missing values become empty cells, and the column order still reads naturally. It is the difference between a converter for examples and one for data.

Questions people ask

What JSON shape does it expect?

An array of objects, [{...},{...}], which is what APIs return for lists. Each object becomes a row; the columns are the union of every key seen, in first-appearance order, so objects with missing fields still line up correctly with blanks.

Why does Excel put all my CSV in one column?

Excel in most of Europe expects semicolons, because the comma is the local decimal separator. Switch this tool's delimiter to semicolon and the same file opens into columns. This single setting explains the majority of 'broken' CSV files.

How are commas and quotes inside values handled?

By the CSV standard: any field containing the delimiter, a quote or a line break is wrapped in quotes, and quotes inside double up. Reading direction honours the same rules, a quoted field can contain commas and even line breaks. Converters that just split on commas destroy exactly these fields.

What happens to nested objects and arrays?

Nested objects flatten into dotted columns, so a user object with a city inside becomes a user.city column, down to three levels deep. Anything deeper stays as JSON text in its cell, visible and recoverable rather than silently dropped. An array of plain values joins into one cell separated by semicolons. For an array of objects you choose: keep it as JSON in one cell, or split it into extra rows that repeat the parent fields, the way spreadsheet people expect order lines under an order.

What is the BOM option for?

A byte order mark is an invisible marker at the start of a file that tells Excel the text is UTF-8. Without it, Excel on Windows often renders é as two garbled characters. Tick it when the file is headed for Excel and contains accents or non-Latin text; other programs simply ignore the mark.

Are numbers and types preserved round-trip?

CSV has no types, everything becomes text, and converting back yields strings. 42 survives as "42". For spreadsheet work this is irrelevant (Excel re-detects numbers); for code, cast after parsing. This is a property of the CSV format, not of any converter.

Can it convert CSV back into JSON?

Not here, this one goes in a single direction. Reading CSV means making calls the other way never has to: whether the first row is a header, whether 007 is a number or a string, what an empty cell means. Those decisions belong to a tool built around them rather than bolted onto this one.