CSV to JSON
Paste rows or drop a file, and get JSON back instantly.
Using toolbook means you agree to our Terms and Privacy Policy.
Paste rows, or drop a .csv file
Values starting with 0 and numbers longer than 15 digits stay as text, so zip codes, phone numbers, and account numbers don’t change. Blank or repeated column names get their own names, so nothing is overwritten.
Your files stay on your device
How to use it
Paste CSV or drop a file here and get JSON instantly. The first row becomes the keys and each row becomes an object. Your data stays on your device.
Paste your CSV or drop the file onto the box above. The JSON appears as you type, ready to copy or download.
Pick your output: a list of objects (what most apps and APIs want), a list of rows (the raw grid), or JSONL — one object per line, for bulk imports and log tools.
Numbers and true/false are converted for you, but carefully: anything starting with 0 (like a zip code) and very long numbers stay as text, so they don’t change. Empty cells become null.
Commas and line breaks inside quoted values are handled properly, and blank or repeated column names are fixed so no data gets overwritten.
FAQ
How do I turn a CSV with headers into JSON objects?
Leave “First row is a header” ticked. Each row becomes an object with the headers as keys.
Why is my zip code text instead of a number?
Because 01234 isn’t the same as 1234. Values starting with 0 stay as text so they don’t change.
What’s JSONL?
One JSON object per line. It’s what bulk-import tools like BigQuery read.
Does it handle commas inside quoted values?
Yes, and line breaks too.
How it worksFor the curious
Rows are parsed with a full RFC 4180 reader, so quoted fields containing commas, doubled quotes, and newlines come through intact.
Values over fifteen digits stay strings because a JavaScript number loses precision past that and would round-trip altered. JSONL is not valid JSON as a whole document, which is why it is a separate output rather than a formatting option.
Blank headers become column1, column2…, and duplicates are suffixed, since a JSON object cannot hold two keys of the same name. Non-UTF-8 files (common from Excel) are detected on load and the encoding is named under the output.