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 converterHow to use it
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.
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.
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.
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
- No type guessing: dates are not parsed, numbers are not forced, and cells starting with = + - or @ are exported exactly as written — with a warning that a spreadsheet may read them as formulas.
- No format zoo: .xlsx is not supported, and files are never fetched from a URL on your behalf.
- No silent repairs: anything the tool changes about your text is reported as a diagnostic.
- 25 MB per file is the ceiling. That is a browser-memory and responsiveness trade-off, not a paywall — the web tool itself has no quota.
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.