Convert CSV to JSON
Turn a CSV file or a pasted table into clean JSON — numbers and booleans typed, nested objects built from dotted headers, and exactly the shape your code expects.
- Processed on your device
- No upload, no waiting
- No signup, no watermark
How it works
Add CSV
Drop a .csv or .tsv file, or paste the data. The delimiter and encoding are detected for you.
Choose the shape
An array of objects, an array of arrays, an object keyed by the first column, or JSON Lines — plus types, empty values and indentation.
Copy or download
Copy the JSON to the clipboard or save it as a .json file.
Frequently asked questions
Which JSON shape should I choose?
An array of objects — [{"name": "Ada", "age": 36}] — suits almost every API and library. An array of arrays is the most compact. A keyed object lets code look records up by ID. JSON Lines puts one record per line, for streaming tools, BigQuery and log pipelines.
How are numbers and booleans decided?
Once per column: a column becomes numbers only when every value in it is a number, so "007" and 7 never end up mixed under one key. Values with leading zeros, and IDs too long for JavaScript to hold exactly, stay strings. true and false become booleans, and empty cells become null — or empty strings, or are left out, as you prefer.
Can it create nested JSON?
Yes. With nesting on, a header like address.city becomes {"address": {"city": …}}, and tags.0, tags.1 become an array.
Is my data uploaded?
No. The conversion runs entirely in your browser; nothing is sent anywhere.
What about semicolons, tabs and other encodings?
Commas, semicolons, tabs and pipes are detected automatically, as are UTF-8, UTF-16 and older Windows encodings, so accented and non-Latin text comes through intact.
What about duplicate or empty column names?
Duplicates get a number (name, name_2) and empty headers get a position-based name (column_3), so no value is overwritten and you are told what changed.
Good to know: Dates stay as the text in your file, because JSON has no date type. Very large files are limited by your browser's memory.