JSON ↔ CSV Converter FAQ
7 common questions · all conversion runs in your browser.
Frequently asked questions (7)
How do I convert nested JSON to CSV?
Paste your JSON and keep "Flatten nested objects" on. Each nested key path becomes a dot-notation column, so {"address":{"city":"London"}} produces a column named address.city. Depth is unlimited. Arrays can be laid out as indexed columns, joined into one cell, kept as a JSON string, or exploded into multiple rows.
Is my data uploaded or stored anywhere?
No. Every conversion runs in your browser with JavaScript. Your JSON or CSV is never sent to a server, there is no login, and nothing is stored remotely. Only your option settings — never the data itself — can be encoded into an optional share link. Once the page has loaded you can use it offline.
How are commas, quotes, and line breaks inside a value handled?
The converter follows RFC 4180. Any value that contains the delimiter, a double quote, or a line break is wrapped in double quotes, and embedded double quotes are doubled ("" ). This lets a single cell safely hold commas and multi-line text, and standard parsers like Excel and Google Sheets read it back correctly.
Can I convert CSV back to JSON?
Yes. Switch the direction toggle to CSV → JSON. The tool auto-detects the delimiter, treats the first row as headers, and can infer types so "123" becomes a number and "true" becomes a boolean. With unflatten on, dot-notation headers such as address.city are rebuilt into nested objects, and numeric segments like tags.0 become arrays.
Why should I enable the UTF-8 BOM for Excel?
Excel on Windows may misread a UTF-8 file that has no byte-order mark, showing Korean, accented, or emoji characters as garbled text. Turning on "Add UTF-8 BOM" prepends the mark so Excel opens the file in the correct encoding. Google Sheets and most other tools accept files with or without it, and the CSV → JSON parser strips the BOM automatically.
What does "explode arrays into rows" do?
Instead of turning an array into indexed columns, explode emits one row per array element and repeats the other fields. So {"id":1,"tag":["x","y"]} becomes two rows: 1,x and 1,y. When a record has several array fields it produces the cartesian product of them, which is handy for flattening API responses but can grow row counts quickly.
Will type inference corrupt IDs or phone numbers?
No. On CSV → JSON a value is converted to a number only when it round-trips exactly, meaning String(Number(value)) equals the original text. Leading-zero codes like 007 and formatted values like 010-1234 fail that check and stay strings. You can also turn type inference off entirely to keep every value as a string.