Free · No sign-up · Nothing uploaded

JSON ↔ CSV converter

Convert JSON to CSV and CSV to JSON instantly — pick a delimiter, copy or download. Everything runs in your browser.

🔒 Your data is converted on your device — nothing is uploaded.

Why use it

🔁

Both directions

JSON → CSV for spreadsheets, and CSV → JSON for APIs and code.

⚙️

Smart parsing

Handles quoted fields, commas in values, and detects numbers and booleans.

🔒

Private

No uploads — perfect for sensitive exports and datasets.

CSV has no types, and that is the whole problem

JSON distinguishes the number 42, the string "42", the boolean true and null. CSV distinguishes none of them — every field is text, and any meaning beyond that is guessed by whatever reads the file. A round trip from JSON to CSV and back is therefore lossy by construction, and the losses are silent.

The specific casualties are worth knowing in advance. null and the empty string both become an empty field and cannot be told apart afterwards. Booleans come back as the strings "true" and "false". Numbers that were precise in JSON — a 19-digit identifier, say — may be re-read as floating point and lose their last digits, because IEEE 754 doubles carry only about 15 to 17 significant decimal figures.

Nested structures have no CSV equivalent at all. This converter flattens them with dotted paths, so {"user":{"name":"Ada"}} becomes a column named user.name, and arrays get numeric segments such as tags.0. That is reversible for regular data, but an array whose length varies between records produces a ragged set of columns — the header is the union of every path seen, so rows that lacked a field get an empty cell.

Quoting, escaping and line endings

RFC 4180 is the closest thing CSV has to a standard, and its rules are narrow. A field must be quoted if it contains a comma, a double quote or a line break. A literal double quote inside a quoted field is escaped by doubling it, so He said "hi" is written "He said ""hi""" — not with a backslash, which is the mistake hand-rolled exporters make most often.

Because a quoted field may legally contain a newline, you cannot parse CSV by splitting on line breaks, and you cannot split rows on commas. Any file containing free-text notes or addresses will eventually break a naive parser. The record separator in the specification is CRLF, though almost everything accepts a bare LF.

Delimiters are a regional issue as much as a technical one. In locales where the comma is the decimal separator, Excel writes and expects semicolon-separated files, so a comma-delimited export opens as a single column. If you are handing the file to a European colleague, that is usually the explanation.

Getting the result into Excel without damage

Spreadsheets aggressively reinterpret text, and the damage happens on open rather than on export. Leading zeros are stripped, so a postcode or a zero-padded SKU loses them. Long digit strings are converted to scientific notation and rounded. Anything shaped like a date is converted to one, which is how gene names such as SEPT1 became notorious in genomics for silently turning into dates.

For UTF-8 content, save with a byte-order mark or Excel will decode the file in the local ANSI code page and mangle every accented character. Excel's own "From Text/CSV" import, where you can set each column's type explicitly, avoids most of this and is worth the extra step for data you care about.

If your goal is inspection rather than conversion, the CSV viewer parses the file to spec in the browser without a spreadsheet touching it, and the JSON formatter will validate the source document before you convert.

JSON ↔ CSV FAQ

How do I convert JSON to CSV?

Paste a JSON array of objects — the CSV appears instantly with a header row from the keys. Choose comma, semicolon or tab as the delimiter.

Can I convert CSV to JSON?

Yes — switch to CSV → JSON, paste CSV with a header row, and get a clean JSON array. Numbers and true/false are auto-detected.

Is my data uploaded?

No. Everything happens in your browser, so your data never leaves your device.

Why do my long ID numbers change when I open the CSV?

The spreadsheet is parsing them as numbers. Beyond about 15 significant digits, IEEE 754 doubles cannot represent every integer exactly, so trailing digits change. Import the column explicitly as text to preserve it.

How are nested objects handled?

They are flattened into dotted column names such as user.address.city, and array elements get numeric segments such as tags.0. Converting back rebuilds the structure from those paths.