Free CSV to JSON Converter
Turn a spreadsheet export into JSON — quotes and embedded commas handled.
Paste CSV or drop a file to get an array of JSON objects, one per row, using the header line for keys. The parser follows RFC 4180: quoted fields may contain commas, newlines and escaped quotes, which is where naive split-on-comma conversions fall apart. Everything runs locally, so you can convert data you would not paste into an unknown website.
How it works
Paste or type CSV
Straight from a spreadsheet export.
Check the delimiter
Detected automatically, or set it yourself.
Copy the JSON
An array of objects, keyed by the header row.
Why splitting on commas is not enough
The obvious approach — split each line on commas — breaks on the first field that contains one. Ada,London,"Mathematician, writer" has three fields, but a naive split produces four. The CSV convention wraps such values in double quotes, and a quote inside a quoted field is written by doubling it.
Newlines are the harder case. A quoted field may contain a line break, so a CSV row is not the same thing as a line of text. Any parser that reads line by line before splitting will silently mangle data exported from spreadsheets where someone pressed Enter inside a cell.
The parser here walks the input character by character, tracking whether it is inside quotes, which handles all three cases correctly. If your output looks wrong, the usual cause is a different delimiter rather than a parsing failure — European exports commonly use semicolons because the comma is the decimal separator.
Types, empty values and what JSON cannot express
CSV has no types: every value is text. With "Convert numbers" enabled, fields that look numeric become JSON numbers rather than strings, which is usually what you want — but check two cases. Identifiers with leading zeros such as postcodes lose them, since 01234 as a number is 1234. And very long digit strings beyond about 15 digits lose precision, which matters for account numbers and IDs. Untick the option to keep everything as strings.
Empty fields become empty strings rather than null, because CSV genuinely cannot distinguish "empty" from "absent" — both are nothing between two delimiters. If your data needs that distinction, it has to be encoded explicitly, for instance with a literal NULL marker.
One more detail worth knowing: duplicate header names. If two columns share a name, the later one overwrites the earlier in each object, because JSON objects cannot hold repeated keys. Rename the columns before converting if that matters.