About

What CSV2JSON does

Two converters on one page: CSV or TSV in, a JSON array of objects out — and the same path in reverse. Paste text or drop a file; the conversion runs on your machine, and the preview, the copied text and the downloaded file are all rendered from one result object.

Open the converter

How to use it

  1. Paste or drop your input

    Paste CSV or TSV text into the left pane, or drop a file onto it — the file picker does the same thing. A file may be up to 25 MB; anything larger is refused with the real size shown, never silently truncated.

  2. Check what was detected

    The delimiter and the “first row is the header” setting are inferred from your data, and the page shows both the inference and the fact that it is one. Automatic detection only ever chooses between comma, semicolon and tab: pipe, caret, colon and space must be picked by hand, because they occur inside ordinary text and a wrong guess shreds the whole table.

  3. Read the diagnostics

    Ragged rows and unterminated quotes are not swallowed. Whatever can be repaired is repaired, and every repair is listed underneath the result together with the row it happened on.

  4. Take the result

    Copy it, download it, or flip the output pane between text and table view. All of these come from a single conversion, so nothing can disagree with what you are looking at.

How it works

Conversion runs in a Web Worker

Parsing and serialising happen off the main thread, so a large file does not freeze the page and typing stays responsive while a conversion is in flight.

One plan object describes the conversion

Every option — input format, encoding, delimiter, number handling, key casing, indentation — is written into a serialisable ConversionPlan. The core is a single primitive, (text, plan) → result, and this page is just one shell around it. The preview, the copy button, the download and the API all take that same path, which is why they cannot drift apart.

Conservative on purpose

Numbers become JSON numbers only when that is safe. Leading zeros (postcodes, phone numbers, order ids) and integers beyond the safe range stay strings, because silently destroying them is the most common complaint about tools like this. Literals such as true or {} are left alone by default, and a dot inside a header is just a character — 2025.Q1 does not turn into nested objects.

Detection you can audit

Delimiter and header detection look at the first 200 rows and report a confidence value. The outcome is never a black box: it is displayed, marked as detected, and one click away from being overridden.

Diagnostics, not exceptions

Problems come back as data — a code, a row number, and what was done about it. The tool would rather tell you what it repaired than pretend nothing happened.

A JSON → CSV export has the union of all columns

Every record contributes its key paths, ordered by first appearance, so a record that omits a key still lines up. Nested objects become dotted columns; arrays stay as compact JSON text. The one lossy step is deliberate: null and a missing key both export as an empty cell.

What it does not do

Where your data goes

Nowhere. Parsing happens in your browser: your input is never sent to a server, and the result is built locally. That is not only a line of copy — the test suite carries an assertion that no request ever contains user input.