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

1

Paste or type CSV

Straight from a spreadsheet export.

2

Check the delimiter

Detected automatically, or set it yourself.

3

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.

Frequently Asked Questions

Yes. The parser tracks quote state character by character, so a value like "Mathematician, writer" stays one field. Escaped quotes (doubled) and line breaks inside quoted fields are handled too.
Yes. Detection usually picks it up automatically, and you can set the delimiter manually. Semicolons are common in European exports because the comma serves as the decimal separator.
Because "Convert numbers" turned it into a JSON number, and 01234 as a number is 1234. Untick that option to keep every value as a string — the right choice for identifiers, postcodes and account numbers.
They become empty strings. CSV cannot distinguish an empty value from a missing one, so there is no reliable way to produce null instead.
No. Parsing happens entirely in your browser, which is the point — you can convert data you would not paste into an unknown website.