CSV → JSON converter
First row becomes the keys, every other row becomes an object. Ready for APIs and code.
0 B uploaded — this page has not sent your files anywhere?
Other conversion sites upload your spreadsheet to a server, process it there, and say they delete it after a while. Until that happens, your rows sit on someone else’s server. Here there is no upload step at all. The more sensitive the data — customer lists, payroll, anything with personal identifiers — the more that difference matters. See how to verify it →
More table converters
What happens to numbers, dates and empty cells when CSV becomes JSON?
For request bodies and mock data, a JSON array is far handier than a table. This tool takes the first row of a CSV as the keys, turns every other row into one object, and shows the result as JSON indented by two spaces. It also works out types, turning values into numbers, booleans and dates but leaving anything with more than one possible reading as text, so knowing its rules saves you cleanup afterwards.
A closer look
Keys come from the first row. If a name appears twice, the second becomes name_1 and the third name_2, so nothing is overwritten; a blank header cell becomes __EMPTY, then __EMPTY_1, and extra values in rows longer than the header get keys the same way. Empty cells come out as null and completely blank rows are skipped. The file is read as UTF-8 first and, if broken characters show up, read again as EUC-KR, a legacy Korean encoding. The delimiter is whichever of comma, tab, semicolon or pipe appears most often outside quotes in the first 1,024 characters.
Anything that reads as a number becomes a JSON number: 1234, 12.5, 50% (0.5), (123) (-123) and 1E5 (100000), while uppercase TRUE and FALSE become true and false. Values whose meaning depends on the country, such as 1,234 or 1.234, are read with a decimal point or a decimal comma only when the same column (or, failing that, the file) holds a value that settles it, such as 12.5 or 1.234,56; otherwise they stay text. That is how 1.234,56 in a semicolon-separated European or Latin American CSV becomes 1234.56. Year-first dates such as 2024-01-05 and 2024/01/05 are normalized to the string "2024-01-05", with the time appended when there is one, as in "2024-01-05 13:45:00". Numbers that start with 0 or +, such as ZIP code 01234 or a phone number, and whole numbers of 16 digits or more stay text so their value does not change.
How to use it
- Choose a CSV, TSV or TXT file in the Upload file tab, or put CSV text or a range copied from Excel into the Paste text tab and press Load as table.
- Check the status line (“Loaded N rows × M columns.”) and the preview of the first 50 rows to make sure the columns split correctly.
- Scan the output box for columns that must stay codes, such as ZIP codes, employee IDs or SKUs, and confirm they did not turn into bare numbers.
- Press Copy result to paste into your code, or Download JSON to save a .json file named after the original.
When it helps
Common snags
Tip In the output box, a value in quotes is a string and a value without quotes is a number or true/false; a quick scan for that difference catches most type problems before they reach your code.
Frequently asked questions
Is the first row used as the header?
Yes. Values in the first row become the object keys and data starts from row two. Duplicate keys get _1, _2 suffixes.
Do numbers come out as strings?
No — values recognized as numbers stay numeric (123, not "123"), and empty cells become null. The exceptions are kept as strings so they can’t turn into a wrong number: codes that start with 0, such as ZIP code 01234, whole numbers of 16 digits or more, and values like 1,234 whose meaning depends on the country when nothing in the file settles it.
My CSV shows garbled characters
sheetmoa reads your file as UTF-8 first. If it finds broken characters (�), it retries only with the Korean legacy encoding EUC-KR (CP949), which Korean Excel uses by default; old .xls files are also read with code page 949. No other legacy encoding is tried. Files saved as UTF-8 (Excel's "CSV UTF-8 (Comma delimited)") open correctly, but a CSV saved in Windows-1252 (what Excel's plain "CSV (Comma delimited)" produces on Western-language Windows) can show broken accents such as "A�o". If that happens, re-save the file in Excel as "CSV UTF-8 (Comma delimited)" and open it again.
Is my data uploaded to a server?
No. Every conversion runs inside your browser and your file is never sent over the network. Safe even for customer lists and confidential spreadsheets.
Is it free?
Completely free — no limits on file count or size, and no sign-up.