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
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
| Symptom | Cause | Fix |
|---|---|---|
| First key starts with an odd character | UTF-8 byte order mark from Excel | Stripped automatically here |
| Everything lands in one column | Wrong delimiter guessed | Set the delimiter manually in the toolbar |
| Rows split in the middle | Unclosed quote earlier in the file | Find the unbalanced " in the source |
| Duplicate column names | Two headers with the same text | Suffixed automatically (name_2) so no column is lost |
| Empty keys in the output | Blank cells in the header row | Named column_1, column_2 and so on |
| Numbers lost their leading zeros | Type inference | Turn 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
-
Paste or upload your CSV
Drop in a
.csvor.tsvfile, or paste the rows directly. Nothing is uploaded. -
Confirm the delimiter
The status line shows which delimiter was detected. If the columns look wrong, choose one manually from the toolbar.
-
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.
-
Copy or download the JSON
Copy the array straight into your code, or download it as a
.jsonfile.
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.