You have a CSV of customer records, or transactions, or survey responses, and you need it as JSON to feed an API or a test fixture. The first three results on Google all want you to upload the file to their server.
For a list of countries, fine. For anything with real people's data in it, that is a data transfer to a third party you know nothing about — and depending on where you work, one you may not be permitted to make.
The browser-based route
The parsing runs in your browser as JavaScript. Nothing is transmitted. You can verify that by opening your browser's developer tools, switching to the Network tab, and watching that no request fires when you convert.
That verifiability is the point. "We delete your files after an hour" is a promise. An empty Network tab is evidence.
What the conversion produces
Given a CSV like this:
name,email,signups
Ada,ada@example.com,3
Grace,grace@example.com,7
you get an array of objects, one per row, with the header row supplying the keys:
[{"name":"Ada","email":"ada@example.com","signups":"3"}, ...]
Note that "3" comes out as a string, not a number. That is deliberate and correct: CSV has no type information, so a converter that guessed types would eventually turn a product code like 00123 into the number 123, or a version string like 1.10 into 1.1. Both are real bugs that have shipped in real systems.
If you need numbers, cast them on the way in. It is one line in whatever language you are using, and it puts the decision where it belongs — with the person who knows what the column means.
Quoted fields and embedded commas
The classic CSV trap: a field containing a comma.
id,address,city
1,"221B Baker Street, Marylebone",London
A naive split on commas breaks this into four fields instead of three. Proper CSV parsing respects double quotes and treats a doubled quote inside a quoted field as a literal quote character. Our parser handles both.
If your output has fields shifted one column across, an unquoted comma in the source is nearly always why. Check the row that first goes wrong.
Where this tool stops
Being clear about the limits so you do not discover them halfway through:
Flat structure only. You get one JSON object per CSV row, with keys from the header. It will not infer nesting from column names like "address.city" — you get a key literally called "address.city". Reshaping nested structures is a job for a script.
The first row must be the header. A CSV that starts with a title line or blank rows will use that as the keys. Trim the file first.
Very large files depend on your machine. Everything runs in your browser, so memory is your laptop's memory. A few tens of thousands of rows is comfortable. For a multi-gigabyte export, use a command-line tool.
Encoding matters. UTF-8 works properly. A CSV exported from an older Windows application in Windows-1252 may show mangled accented characters. Re-export as UTF-8 if you see that.
For repeated work, script it
If this is a one-off, a browser tool is the fastest path. If you are doing it weekly, write the five lines — Python's csv and json modules, or jq, or Node's csv-parse. It is quicker after the second time and it fits into a pipeline. Browser tools are best for the ad-hoc case where opening an editor is the slow part.