CSV to JSON
Convert a CSV/TSV/semicolon/pipe delimited document into valid, strict JSON.
Working…
Questions people ask
- Are numbers and dates converted to real types?
- No, deliberately. Every field becomes a JSON string exactly as it appears, so "007" keeps its leading zero and "2026-05-01" never mutates into a time-zone-shifted date or a truncated number. Type inference at scale is a common way datasets get corrupted.
- What if two columns share a name?
- The first keeps its name and later duplicates are renamed with .2, .3 … so no value is dropped and the JSON stays unambiguous; the count is in the result.
- What about rows that are shorter or longer than the header?
- The conversion refuses them by default: you get one diagnostic naming every affected line with the expected versus actual column counts, and no partial JSON built from inconsistent records. Choose "permissive" in the options to convert anyway; missing values become empty strings and surplus cells are kept as surplus_1, surplus_2 and so on (rows output keeps ragged arrays), so nothing is ever dropped.
- Are quoted fields with newlines and "" quotes supported?
- Yes: RFC 4180 quoting via the standard CSV parser in strict mode, so embedded CR/LF, doubled quotes and embedded delimiters are all honoured. A single quoted field may be up to 6 MB.
- What if the file has a header but no data rows?
- That converts to an empty list, and the result carries an explicit warning saying so (with the header=no alternative for when row 1 was actually a data record); an empty result is never silent.
- What if the file is not valid CSV?
- You get a diagnostic naming the exact stop position (for example an unterminated quote near line N) instead of a half-converted guess. Bad UTF-8 and NUL-byte documents are likewise refused with a named reason.
- How big can the document be?
- Up to 8 MB of delimited text; the converted JSON is capped at 16 MB and refused, not truncated, if it would be larger.
- What happens to my files?
- The input is removed as soon as processing finishes; the JSON is available for about 10 minutes, then automatically deleted.