Why Every CSV Value Stays a String
The root cause of most surprises when converting CSV to JSON is the fundamental difference in type systems. CSV has no types. Every field—whether it looks like 42, true, null, or 2024‑12‑01—is stored as plain text. JSON, by contrast, supports numbers, booleans, null, and strings explicitly. This page does not attempt to infer types. It treats every value from the source CSV as a string. So a price column with 9.99 becomes "9.99" in the output JSON, not 9.99. A boolean column with TRUE becomes "TRUE", not true.
This behaviour is deliberate. Automatic type inference would introduce ambiguity. Is 00123 a number that should lose its leading zeros, or a postal code that must keep them? The tool preserves the original text exactly as it appears in the CSV. If you need numeric or boolean values in the output, you must convert them downstream—either with a JSON parser that offers a reviver function, or with a short script that maps the string values to the types your application expects.
Leading zeros are a common casualty when users load the JSON into environments that auto-parse numbers. JavaScript’s JSON.parse, for example, will turn "00123" (a string) into 123 (a number) if the application reads the value without explicitly treating it as a string. The tool itself does not cause that loss—the zeros are correctly written to the JSON file as "00123". The loss happens only when the consumer of the JSON coerces the string to a number. If leading zeros matter (product codes, postcodes, account numbers), keep the value as a string in your downstream code.
Line breaks inside quoted CSV fields are also preserved. The tool writes them as \n escape sequences in the JSON string values, so a multiline address field in the CSV becomes a single string with embedded line breaks. This follows the CSV specification (RFC 4180) and yields valid JSON.
Delimiter Selection: Why It’s Not Optional
CSV stands for “comma-separated values,” but many real-world files use semicolons or tabs. The tool requires you to specify the delimiter when the input is CSV. This choice is not a minor detail—it directly determines whether the file parses at all.
A CSV that uses commas to separate fields works with the default “Comma” setting. If the same file uses semicolons (common in European locales where the comma is the decimal separator), selecting “Comma” will produce a single column with semicolons embedded in every value—incorrect. The “Semicolon” option handles those files. “Tab” is used for TSV files (tab-separated values), which often come from spreadsheet exports or database dumps.
The fragility of CSV quoting compounds delimiter problems. When a field contains the delimiter character—for example, a city name like "Paris, France"—the CSV standard requires the field to be wrapped in double quotes. If the quoting is absent or malformed, the parser cannot distinguish the embedded comma from a column separator. The tool enforces RFC 4180 quoting rules. If it encounters a row where the number of fields does not match the header row, or where quoting is broken (e.g., an unescaped double quote inside an unquoted field), it displays:
"This CSV could not be parsed."
This error often results from files saved by non-standard CSV exporters, spreadsheet programs that embed commas without quoting, or manual edits that introduce unbalanced quotes.
Structural Limitations: Flat Tables Only
CSV is a strict rectangular grid. Each row has the same number of columns, and every cell is a scalar value. The conversion produces an array of flat JSON objects, where the header row supplies the keys and each data row supplies the values. No nesting is possible. If your source data contains hierarchical relationships—an order with multiple line items, for example—a single CSV file cannot represent that structure without repeating parent data in every child row. The tool does not attempt to reconstruct parent-child relationships. The output JSON is always:
[
{ "order_id": "1001", "item": "widget", "quantity": "2" },
{ "order_id": "1002", "item": "gadget", "quantity": "1" },
...
]
Every object has the same keys. There is no nested "items" array. Converting that back to the original hierarchical JSON is not possible from the CSV alone; you would need a separate lookup table or a convention (like repeated parent columns) that the tool does not recognise.
This also means that if you start with a JSON source that has nested objects (for example, a person object with an address object inside it), converting that JSON to CSV requires flattening—address fields become separate columns like "address.street", "address.city". The reverse direction (CSV to JSON) does not unflatten, because the flat CSV structure carries no information about which columns belong to which nested object.
Client-Side Processing and Privacy
The entire conversion happens in the browser. No file is uploaded to a server. This is a deliberate architectural choice that has two practical implications:
- Sensitive data stays local. If you are converting a CSV of customer contact information, medical records, or financial transactions, the raw data never leaves your device. The tool works offline after the page loads.
- File size limits are enforced in the browser. Because processing happens locally, very large files can cause the browser tab to become unresponsive or crash. The tool accepts files up to 8 MB—when exceeded, it displays:
"This file is too large. Use a file under {max}."
It also caps tables at 10,000 rows and 200 columns. If the table has more rows, the message is:
"This table has more than {max} rows."
Similarly for columns. These limits are in place to keep conversion times reasonable and to avoid memory exhaustion on the client side.
If the conversion runs past about 12 seconds, it is stopped and you see:
"This conversion is taking too long. Try a smaller file."
You are not left wondering whether the tab has frozen.
What the Tool Tells You When Something Goes Wrong
The tool covers the most common failure modes with specific messages. They are worth knowing in advance because they often point to specific causes.
| Error message | Most likely cause |
|---|---|
"Choose one file first." |
No file was selected before clicking the conversion action. |
"Choose a CSV, JSON or XLSX file." |
The selected file has an extension other than .csv, .json, or .xlsx. |
"This CSV could not be parsed." |
The CSV has quoting errors (unbalanced quotes, missing commas inside quoted fields), inconsistent column counts between rows, or a mix of delimiters. |
"This file has no table rows." |
The file is empty, or every row in it is blank. A header-only CSV is not an error—it converts to an empty array ([]). |
"This table has more than {max} rows." |
The number of data rows exceeds the 10,000-row limit. |
"This table has more than {max} columns." |
The number of columns exceeds the 200-column limit. |
"This file is too large. Use a file under {max}." |
File size in bytes exceeds the 8 MB limit. |
"This conversion is taking too long. Try a smaller file." |
The conversion ran past the roughly 12-second limit, usually because the file is too large or complex. |
All errors are terminal for that conversion attempt. The tool does not attempt to repair a malformed CSV or to truncate a file that exceeds limits.
FAQ
Why are all my numbers still strings in the JSON output?
Because CSV has no type information. The tool treats everything as text. If you need numbers, you must convert them after download. For example, in JavaScript: json.map(row => ({...row, price: Number(row.price) })).
My CSV has leading zeros in postal codes, but they disappeared when I opened the JSON in my program. What happened?
The tool preserved them as strings ("00123"), but your program’s JSON parser may have coerced them to numbers when you accessed the value. Read the JSON as a string and keep it as a string. Do not use JSON.parse with an automatic type conversion, or wrap the field in additional quotes.
Can I convert a CSV that contains nested data, like an order with multiple line items?
No. CSV is a flat grid. One row per line item means the order ID repeats on every row. The tool outputs an array of flat objects. You would need to post-process the JSON to group rows back into nested structures.
My CSV has line breaks inside a cell (a multi-line address). Will the JSON handle that correctly?
Yes. If the cell is properly quoted according to RFC 4180, the line break is preserved as a \n escape sequence inside the JSON string. The output remains valid JSON. If the CSV is not quoted, the line break is misinterpreted as a new row and the parse fails.
The tool says my file is too large. How can I convert it?
The limit is 8 MB. Reduce the file size: remove extraneous columns, split the CSV into chunks, or use a desktop tool that can handle larger files. The client-side limit exists because your browser runs the conversion with the available memory.
I selected “Comma” as the delimiter but the output looks wrong. What should I do?
Check whether your CSV actually uses commas. Open the file in a plain text editor. If you see semicolons between values, choose “Semicolon”. If you see tabs, choose “Tab”. A quick scan of the first few lines will tell you.