CSV to JSON Converter

Convert CSV to JSON and back — parsed in your own browser, so the file never leaves your machine.

Most CSV converters you find online quietly send your file to somebody else's server. That is a real problem, because the CSVs people convert are rarely toy data — they are customer lists, order exports, payroll runs and mailing lists. This one parses everything inside your own browser tab. There is no upload, no server call, no account and nothing stored. You can disconnect from the internet and it still works.

The second thing that matters is correctness. A converter that silently turns ZIP code 02134 into 2134, or splits a quoted address on the comma inside it, has corrupted your data in a way you may not notice until much later. This parser handles the messy real-world cases properly: quoted fields containing commas and line breaks, doubled quotes as escapes, semicolon and tab exports from European Excel, CRLF line endings, a stray UTF-8 byte order mark, duplicate header names, and rows with the wrong number of fields — which get reported with their line numbers instead of being silently mangled.

Both directions work. Going the other way, JSON to CSV, it takes the union of every key so no field is dropped, flattens nested objects with dot notation like address.city, serialises arrays, and quotes and escapes the output the way RFC 4180 says it should. A table preview shows you exactly what was parsed before you trust it.

Your file never leaves this browser tab. The parser runs on your own machine — there is no upload, no server call and nothing stored. Safe for customer lists, order exports and payroll files.

CSV input

… or drop one on the box above. It is read locally, never uploaded.

JSON output

0 records
Your converted output appears here as you type.

Table preview

Check the parse before you trust it.
Nothing parsed yet.

How types are decided: with inference on, plain integers and decimals become numbers, true/false become booleans, and empty cells become null. Anything that would lose information stays a string — values with a leading zero (007, ZIP 02134), digits longer than JavaScript can hold exactly, and decimals whose trailing zeros matter (1.0, 2.50). Turn inference off to keep every cell as text.

Watch: how to use this tool

How to use it

  1. Pick a direction — CSV to JSON, or JSON to CSV.
  2. Paste your data into the box, or drop a .csv or .json file onto it. The file is read locally by your browser; nothing is sent anywhere.
  3. Check the delimiter. Auto-detect picks between comma, semicolon, tab and pipe, and tells you what it found — override it from the dropdown if it guessed wrong.
  4. Decide whether the first row is a header and whether to infer types. With inference off, every cell stays a string.
  5. Read the table preview and any warnings — ragged rows and renamed headers are listed with their line numbers.
  6. Copy the result, or download it as a file. Both happen entirely on your machine.

Questions

Is my file uploaded anywhere?
No. The parser is plain JavaScript running inside your browser tab, so the data never crosses the network. There is no upload endpoint, no analytics call carrying your content, no account and nothing written to a server. You can load the page, turn off your wifi, and every feature still works — that is the simplest way to prove it to yourself. This is why the tool is safe for customer lists, order exports and payroll files that you would not paste into a random website.
Why did another converter turn my ZIP code 02134 into 2134?
Because it converted every numeric-looking cell into a JSON number, and a number has no concept of a leading zero. The same bug shrinks product codes like 007 and rounds long order IDs once they pass about 16 digits. This converter only turns a cell into a number when the number can be written back out as the exact same text. Leading zeros, digit strings beyond JavaScript's safe integer range, and decimals whose trailing zeros carry meaning — 1.0, 2.50 — all stay strings. If you would rather nothing at all was converted, untick Infer types and every cell comes out as text.
What about semicolon-separated CSV from Excel?
It works. Excel on a machine with a European locale writes semicolons instead of commas, because the comma is the decimal separator there. Auto-detect tries comma, semicolon, tab and pipe, scores each one on how many fields it produces and how consistent the row widths are, and shows you which it picked. If it guesses wrong — a one-column file with lots of semicolons inside the text, for example — set the delimiter by hand from the dropdown.
How are nested objects handled when converting JSON to CSV?
CSV is flat, so nested objects are flattened with dot notation: an object like address: { city: "Boston" } becomes a column called address.city. Nesting goes as deep as your data does — billing.address.postcode is fine. Arrays cannot be flattened without inventing rows, so they are written as their JSON text, for example ["vip","email-only"], which is unambiguous and can be read straight back. The header is the union of every key across every record, in first-seen order, so a key that only appears on record 40 still gets a column; records that lack it get an empty cell.
What happens to rows with too many or too few fields?
They are converted and reported, never silently dropped or shifted. A row with fewer fields than the header gets null for the missing keys; a row with more gets the extras kept under column_8, column_9 and so on rather than thrown away. Every one of those rows is listed as a warning with the line number it came from, so you can go back to the source file and see what happened. Most of the time the cause is an unquoted comma inside a free-text field.
Does it handle commas and line breaks inside quoted fields?
Yes — that is the case most quick converters get wrong. A field wrapped in double quotes may contain the delimiter, carriage returns and line feeds, and doubled double-quotes as an escape for a literal quote character. So "Knuth, Donald" stays one field, a multi-line address stays one cell, and Said ""ship it"" twice comes out with real quotes around ship it. CRLF and LF line endings both work, and a UTF-8 byte order mark at the start of the file is stripped rather than glued to your first column name.

Built by US APP Team

Need more than a free tool?

We build custom mobile apps for founders and small businesses — idea to live on the App Store and Google Play. Fixed price, no surprises, and you own the code.

Start your app brief Takes about 3 minutes · or book a free intro call