JSON to CSV Converter
Convert JSON to CSV online free. Flatten nested JSON, pick any delimiter, add a UTF-8 BOM for Excel, and download a spreadsheet-ready CSV in your browser.
About JSON to CSV Converter
JSON to CSV Converter is a free online tool that converts JSON (JavaScript Object Notation) data into CSV (Comma-Separated Values) format. Upload a JSON file or paste JSON data, choose your CSV delimiter and options, and download the converted CSV file—all processed locally in your browser for complete privacy.
Does this converter follow RFC 4180?
Yes, for escaping. Any field that contains the delimiter, a double quote, or a line break (LF, CR, or CRLF) is wrapped in double quotes, and every literal double quote inside the field is doubled. For example, the string She said "go, now" is encoded as "She said ""go, now""". This produces a file that round-trips faithfully through Excel, Google Sheets, LibreOffice, Pandas read_csv, and PostgreSQL COPY. By default rows end with a plain LF; tick "Windows line endings (CRLF)" to emit \r\n line breaks, which is the RFC 4180 default that some legacy Windows importers expect.
Why does Excel mangle UTF-8 characters like é, ñ, or 中, and how do I fix it?
Excel for Windows historically opens CSV files using the system's default code page (often Windows-1252 in Western locales) rather than UTF-8, which corrupts any non-ASCII character. The fix is to prepend a UTF-8 byte-order mark (EF BB BF) to the file so Excel interprets it as UTF-8. This converter has a "UTF-8 BOM (Excel-safe)" checkbox, on by default, that adds exactly this mark to the downloaded file — accented and CJK characters then open correctly in every Excel version. If you prefer a BOM-free file, untick the box; modern Excel (365, 2021+) and Excel for Mac read BOM-free UTF-8 fine, or you can import via Excel's "Data → From Text/CSV" wizard and pick the 65001 (UTF-8) code page.
How does it handle nested objects and arrays?
By default "Flatten nested objects" is on, so {"user":{"name":"Alice","age":30}} becomes the columns user.name and user.age in dot notation — the most useful form for analytics. Turn the option off and each nested object is written as a single JSON string in one cell instead, which is handy when you want to round-trip the document. Nested arrays are always serialized to a compact JSON string (for example ["red","green"] becomes ["red","green"] in one cell) rather than exploded into extra rows, so the row count stays predictable. For deeply hierarchical data that does not map cleanly to a flat table, consider keeping it as NDJSON instead.

What if my JSON objects have different keys from one record to the next?
This schema heterogeneity is the rule, not the exception, with real-world API data. The converter scans every record, computes the union of all keys, and emits a single header row containing every key it found; cells where a particular record had no value for that column are left empty. The result is a sparse but rectangular CSV that every spreadsheet and SQL importer can read, so no field is silently dropped. If half your records are genuinely a different shape (say users vs. orders), split the input and convert each set separately rather than merging them into one wide table.
Which delimiters are supported, and how are arrays of primitives handled?
Pick comma, semicolon, tab, pipe, or a custom character from the delimiter list — semicolon is common in European locales where the comma is a decimal separator, and tab gives you a TSV. Whatever delimiter you choose is also what gets escaped per RFC 4180. A top-level array of primitives such as ["red","green","blue"] is written as a single-column CSV with one value per row, and the tool reports it correctly as one column (it does not mistake the first string's length for a column count). Arrays of arrays like [["a",1],["b",2]] are written one sub-array per row, with the first row optionally treated as headers.
Is my data uploaded anywhere, and what is the size limit?
Nothing is uploaded. Parsing and conversion run entirely in your browser with JavaScript, so sensitive customer, financial, or API data never leaves your machine. You can either paste JSON into the text box or drop a .json/.txt file onto the upload zone. There is no hard byte cap, but the whole document is held in memory, so very large files are limited by your browser's available RAM; the on-page preview is truncated to the first 100 KB for files over 1 MB while the full content is still written to the downloaded file. For multi-gigabyte documents, use a streaming command-line tool such as Miller, DuckDB, or jq instead of a browser.
