CSV to JSON Converter
Every value stays a string. This converter does not guess types, so 00123 stays "00123", TRUE stays "TRUE" and 3/4/26 stays "3/4/26" — a zip code keeps its zeros and a date is not silently reformatted. The only null values in the output are the cells a short row never had. It is a re-serialisation of your text, not a spreadsheet: your CSV is read in this tab and is never uploaded.
Paste or type CSV, or open a file. Nothing is pre-filled. Caps: 5,242,880 characters of pasted text or 5 MB (5,242,880 bytes) of file, 20,000 rows, 512 columns per row, 100,000 characters per cell. Every one is refused with its real numbers before any parsing work starts.
Header cells become the keys. Turn this off and the keys are generated as column1, column2, …
Paste CSV above, or open a file, and the JSON appears here.
Rows — columns — JSON size — no sample CSV is pre-filled, so nothing on this page can be mistaken for your data.
This conversion is not lossless, and here is exactly where it changes your data.
Preserved: every cell's text character for character, including leading and trailing spaces, embedded delimiters, embedded line breaks and doubled quotes; the order of the rows; and the order of the columns.
Changed on purpose: no type is inferred — all values are JSON strings. Keys come from the header row with surrounding whitespace trimmed, or are generated as column1…columnN. Empty header cells become columnN for their position. Duplicate header names become name (2), name (3) and so on, and every rename is listed above. A row with fewer fields than keys gets JSON null in the missing cells; a row with more fields keeps the extra values in a _surplus array. Blank lines are skipped. A leading UTF-8 BOM is skipped. CRLF, LF and a bare CR all end a record.
Not done, though a spreadsheet does it: no Excel serial dates, no locale-aware number or currency parsing, no #N/A or other error values, no stripping of a leading apostrophe that marks text, no formula evaluation — =SUM(A1:A9) stays that literal string — and no encoding sniffing, so a file that is not UTF-8 arrives with U+FFFD characters. Quoting style is not preserved: a cell that did not need quotes in the source may need them here, and a cell quoted in the source may not.
Dialect: RFC 4180 with a configurable delimiter, plus three disclosed extensions — a skipped BOM, skipped blank lines, and a bare CR treated as a line ending. A quote in the middle of an unquoted field is reported as an anomaly rather than accepted, because accepting it quietly is how a converter loses a comma. Input is capped at 5,242,880 characters of pasted text, 5 MB (5,242,880 bytes) per opened file, 20,000 rows, 512 columns per row and 100,000 characters per cell; each is refused with its real numbers before any parsing work starts.
Both panels above are previews, and the copy and download buttons give you the whole document.