Data Format Converters

CSV to JSON Converter

Paste CSV — or upload the file your spreadsheet exported — and get back a JSON array of objects, with the header row used as keys. The delimiter is detected automatically, and quoted fields containing commas or line breaks are parsed correctly.

  • Free, no sign-up
  • Runs in your browser
  • Nothing uploaded
  • Updated Sep 2026
Input
CSV input
JSON output
Waiting for input

At a glance

Direction
CSV → JSON (for the reverse, use the JSON to CSV converter)
Processing
Entirely client-side — nothing uploaded
Delimiters
Comma, semicolon, tab and pipe, detected automatically
Standard
RFC 4180 quoting, including escaped quotes and embedded newlines
Output
Array of objects, or array of arrays
Cost
Free, no account, no row limit

What this converter does

CSV looks trivial until you meet a real file. A product description containing a comma, an address spanning two lines, a quoted field with a quote inside it — all of these are legal CSV, and all of them break a converter that simply splits on commas. This parser implements RFC 4180 properly, so quoted fields survive intact, doubled quotes ("") collapse to one, and a newline inside quotes stays part of its field rather than starting a new row.

It also guesses the delimiter rather than assuming a comma. Exports from European locales commonly use semicolons, because the comma is the decimal separator there; database dumps often use tabs or pipes. The parser samples the first dozen lines and picks the delimiter that produces the most consistent column count.

The default output is an array of objects keyed by the header row, which is what almost every API and JavaScript consumer expects. If your file has no header, or you want the raw grid, the array-of-arrays option gives you that instead.

Type inference, and when to switch it off

CSV has no types. Every cell is text, so 42, true and 2026-01-15 all arrive as strings. JSON does have types, and consumers usually want {"quantity": 42} rather than {"quantity": "42"}. Type inference, on by default, converts anything unambiguous.

There is one rule worth knowing: values with leading zeros are kept as strings. A zip code of 02134, a SKU of 007 and a phone number beginning 0 are identifiers, not quantities, and converting them to numbers destroys them permanently. Very large integers beyond JavaScript's safe range are kept as strings too, for the same reason — precision would be silently lost.

Switch inference off when every column should stay text. That is the right choice when the JSON feeds a system that does its own parsing, or when you are round-tripping data and want the output to match the input byte for byte.

Common CSV problems and what to do about them

SymptomCauseFix
First key starts with an odd characterUTF-8 byte order mark from ExcelStripped automatically here
Everything lands in one columnWrong delimiter guessedSet the delimiter manually in the toolbar
Rows split in the middleUnclosed quote earlier in the fileFind the unbalanced " in the source
Duplicate column namesTwo headers with the same textSuffixed automatically (name_2) so no column is lost
Empty keys in the outputBlank cells in the header rowNamed column_1, column_2 and so on
Numbers lost their leading zerosType inferenceTurn inference off, or quote the column at export

If you are exporting from Excel specifically, choose CSV UTF-8 rather than plain CSV. The plain option writes in a legacy code page, and any accented character or non-Latin script arrives corrupted in a way no converter can reliably undo.

How to use the CSV to JSON Converter

  1. Paste or upload your CSV

    Drop in a .csv or .tsv file, or paste the rows directly. Nothing is uploaded.

  2. Confirm the delimiter

    The status line shows which delimiter was detected. If the columns look wrong, choose one manually from the toolbar.

  3. Decide on type inference

    Leave it on for most uses. Turn it off when identifiers such as zip codes or SKUs must stay exactly as written.

  4. Copy or download the JSON

    Copy the array straight into your code, or download it as a .json file.

Frequently asked questions

Is my spreadsheet data uploaded anywhere?

No. The file is read with the browser's FileReader API and parsed in the page. Nothing is transmitted — which matters, because CSV exports are usually customer lists, orders or financial records.

How does it handle commas inside a field?

Correctly, as long as the field is quoted, which is what RFC 4180 requires and what every spreadsheet produces. "Smith, John" parses as one value. A quote inside a quoted field is written as two quotes and collapses back to one.

My file uses semicolons. Will it work?

Yes. Semicolons, tabs and pipes are all detected automatically, and you can override the choice in the toolbar. Semicolon-separated files are standard in locales where the comma is the decimal separator.

Why are my zip codes strings instead of numbers?

Deliberately. A zip code like 02134 would become 2134 as a number, which is wrong and irreversible. Any value with a leading zero is kept as text.

What if my CSV has no header row?

Switch the output to array-of-arrays, which gives you the raw grid with no keys. Alternatively, add a header row first — it is usually worth doing, because keyed objects are far easier to work with downstream.

How large a file can it handle?

Files of a few megabytes and tens of thousands of rows are fine. Much beyond that, browser memory becomes the limit and a command-line tool such as csvkit or a short Python script is more appropriate.