Convert CSV to JSON
Paste CSV data, or drop a .csv file, and download it as a JSON array. Every value stays a string, matching the CSV’s own text - nothing is guessed at.
Convert CSV to JSON
Drop your CSV file here
Up to 20MB per file. Stays on this device.
Nothing is sent anywhere. Turn off your Wi-Fi and this page still works - try it.
How it works
- Drop or choose a .csv file, or paste CSV text directly into the text box.
- Review the preview - every row becomes one JSON object, keyed by the header row.
- Download the result as a JSON file.
Input
sku,name,price
A100,Widget,9.5
A101,Gadget,14
A102,Gizmo,21.75
Output
[
{
"sku": "A100",
"name": "Widget",
"price": "9.5"
},
{
"sku": "A101",
"name": "Gadget",
"price": "14"
},
{
"sku": "A102",
"name": "Gizmo",
"price": "21.75"
}
]A 3-row CSV converted into a 3-object JSON array. Every value stays a string.
Frequently asked questions
Is my CSV sent anywhere?
No. Pasted CSV and uploaded files are both read and converted entirely on your device - nothing is sent to a server. Turn off your Wi-Fi after the page loads and it still works. This page loads 10KB of JavaScript, gzipped - about what your browser's network tab will show for this page's own scripts.
What CSV shape does this expect?
A header row followed by one or more data rows, comma-separated, with double-quoted fields for any value containing a comma, quote, or line break (standard RFC 4180 CSV) - the same shape every spreadsheet program exports by default.
Are numbers and true/false converted to real JSON types?
No, deliberately - every value stays a JSON string, exactly as it appeared in the CSV. CSV itself carries no type information, so guessing at a "real" type risks silently corrupting a value that only looks numeric, like a leading-zero code (0042 becoming 42) or a phone number. If you need typed values, use Excel to JSON instead, which reads real cell types from a genuine spreadsheet file.
What happens to a blank or repeated column header?
A blank header cell becomes column_N (its 1-indexed position); a repeated header name gets a trailing _2, _3, and so on - so every JSON key is always unique and non-empty, and no column silently overwrites another.
What if a row has more or fewer fields than the header?
A short row gets an empty string for its missing trailing fields; a long row has its extra trailing fields dropped. No column ever shifts out of place because of a ragged row.
Files are processed locally in your browser and never uploaded. Read more on the privacy page.