CSV to JSON

Drop a CSV or TSV file and download it as JSON. Pick the delimiter (or let it auto-detect), choose whether the first row is a header, and select the output shape. Everything runs locally — nothing is ever uploaded.

Files never leave your device

Drop a CSV or TSV file, or click to browse

CSVTSVTXT

What This Tool Does

This tool turns a CSV, TSV, or other delimited text file into JSON without ever leaving your browser. Drop your file, choose a delimiter or leave it on auto-detect, decide whether the first row is a header, and pick the shape you want the output in — array of objects or array of arrays — then convert and download.

There's nothing to install and nothing to upload. Conversion runs through a small WebAssembly module loaded directly into your browser tab, so your file is read, parsed, and turned into JSON entirely on your own device.

Tip: If you're not sure which shape to pick, start with array of objects — it keeps your column names attached to every value, which is what most scripts, spreadsheet imports, and no-code tools expect. Switch to array of arrays only if you specifically need a plain grid of values with no keys.

Delimiters, Headers, and Quoted Fields

Most CSV exports use a comma, but plenty don't — European spreadsheet software often defaults to a semicolon, and tab-separated exports are common enough to have their own extension, TSV. Rather than making you figure that out first, this tool scans the first line of your file, counts how often comma, semicolon, tab, and pipe appear outside of quoted text, and picks whichever appears most. You can always override that guess with the delimiter dropdown if your file is unusual or you'd rather be explicit.

Quoted fields are handled the way spreadsheet software expects: a value wrapped in double quotes can contain the delimiter itself, a line break, or an escaped double quote, and the parser won't mistake any of that for a column or row boundary. A Vietnamese name written with a comma inside quotes, or a multi-line address field, both convert cleanly into a single JSON string.

Records vs. Rows: Picking Your JSON Shape

The array-of-objects shape ("records") gives every row a JSON object with keys taken from your header — the column called email becomes the key email in every object, and a missing header falls back to a generated name like col3. This is the shape most APIs, spreadsheets, and scripting tools expect when they import JSON.

The array-of-arrays shape ("rows") skips keys entirely and gives you a plain matrix: each row is just a list of values in column order. It's more compact, and it's a better fit if you're feeding the data into something that only cares about positional values rather than field names.

Nothing Leaves Your Browser

Because conversion happens through WebAssembly running inside your browser tab, your file never has to be sent anywhere to be processed — there's no upload step, no server holding a copy even briefly, and no dependency on your internet connection once the page has loaded. The tradeoff is that the JSON output is pretty-printed and, especially with the array-of-objects shape, noticeably larger than your source CSV; that's the readable, debuggable format working as intended, not a sign that something went wrong.

Where to Go Next

If you need to go the other direction, JSON to CSV converts a JSON array back into a CSV file. Working with an Excel workbook instead of a plain CSV? Excel to CSV extracts one or every sheet as CSV first, and CSV to Excel goes the other way, turning a CSV into a real XLSX workbook.

Frequently asked questions

Do I have to tell the tool what delimiter my CSV uses?
Not usually. The converter scans the first line of your file, ignores anything inside quoted fields, and counts how often comma, semicolon, tab, and pipe show up outside those quotes — whichever wins becomes the delimiter, with comma as the default on a tie. If your export uses something unusual, or you just want to be certain, the delimiter dropdown lets you override the guess and pick comma, semicolon, tab, or pipe by hand. A TSV file works the same way — it's just tab picked as the delimiter.
What's the difference between the two output shapes?
Array of objects gives each row a set of named keys taken from your header row, which is the shape most scripts and no-code tools expect. Array of arrays gives you a plain grid instead — every row is just a list of values with no keys attached. If your first row is a header and you choose the array-of-arrays shape, that header line is used only to know it isn't data; its text doesn't appear anywhere in the output, so pick array of objects if you still need the field names attached to each entry.
What if my first row isn't a header row?
Turn off the first-row-is-a-header toggle before converting. Every row is then treated as data, and if you're using the array-of-objects shape, keys are generated automatically as col1, col2, and so on based on column position, rather than being pulled from a row that was never meant to be a header.
My CSV has commas inside quoted fields, like a name written as Nguyen, Van A — will that break the conversion?
No. Quoted fields are parsed per the standard CSV quoting rules: a value wrapped in double quotes can safely contain the delimiter itself, a line break, or an escaped double quote, and none of it gets mistaken for a new column or a new row. The name in your example converts to a single JSON string value exactly as written, comma included.
Is my file uploaded anywhere to do this conversion?
No. The whole conversion runs through a WebAssembly module loaded into your browser tab — your CSV bytes are read, parsed, and turned into JSON on your own device, and the result never travels over the network before it lands in your downloads.
Why is the downloaded JSON file so much bigger than my original CSV?
Two reasons. First, the output is pretty-printed with two-space indentation so it's readable and easy to diff, rather than squeezed onto one line. Second, if you're using the array-of-objects shape, every single row repeats its column names as keys, where a CSV states them once in the header. Together that typically makes the JSON around two to three times the size of the source file — expected, not a bug. Choosing the array-of-arrays shape trims some of that overhead since it drops the repeated keys.