JSON ↔ CSV Converter
Convert JSON to CSV and CSV to JSON. Flatten nested objects, pick a delimiter, and download the result — all in your browser.
Bidirectional
Convert JSON to CSV or CSV to JSON in one click. Reuse the output as the next input to round-trip and verify.
Nested-aware
Flatten nested objects into dot.path columns or keep them as JSON. Mixed-shape rows are unioned automatically.
RFC 4180 escaping
Quotes, commas, and newlines inside fields are escaped correctly. Optional auto-typing on CSV → JSON.
JSON to CSV: how the columns are chosen
The converter walks every row in the input array and collects keys in the order it first sees them. That means the column order in the output CSV reflects the structure of your data, not an alphabetical re-order. When two rows have different keys, both sets of columns appear; rows that lack a column simply get an empty cell there.
Flattening nested objects
CSV is flat — it has no native concept of nested values. With flattening on, an object like { "user": { "name": "Ada", "address": { "city": "London" } } } becomes two columns: user.name and user.address.city. Arrays of objects use bracket indices: items[0].price, items[1].price, and so on. With flattening off, each nested value is serialized to a JSON string and stored in a single cell.
CSV to JSON: types and headers
The first row of the CSV is treated as a header by default, and each subsequent row becomes a JSON object keyed by those headers. Disable the header switch and the converter falls back to col1, col2, etc. Auto-typing promotes obvious numbers, true, false, and null to their JSON-native types — turn it off when leading zeros, phone numbers, or other string-ish data must be preserved verbatim.
Frequently asked questions
›What does a JSON ↔ CSV converter do?
It converts tabular data between two of the most common text formats. JSON is the default for APIs and web applications; CSV (comma-separated values) is the default for spreadsheets and data exchange with non-developers. The converter parses one format, normalizes the data, and emits the other — both directions, with no server round-trip.
›What shape of JSON can I convert to CSV?
Either an array of objects (each object becomes one row) or a single object (treated as one row). Keys across rows do not have to match — the converter collects every key it sees and produces a column for it, leaving cells empty when a row does not contain that key.
›How are nested objects handled?
By default, nested objects are flattened using dot notation: { user: { name: 'Ada' } } becomes a column called user.name. Arrays of primitives are JSON-encoded into a single cell. Arrays of objects are flattened with bracket indices, e.g. items[0].price. Turn off 'Flatten nested' to keep nested values as raw JSON strings instead.
›What delimiters are supported?
Comma (,), semicolon (;), tab, and pipe (|). Semicolon is the de-facto standard in many European spreadsheets where the comma is used as the decimal separator. Tab-separated values (TSV) are common in data pipelines because tabs almost never appear inside fields.
›How does CSV escaping work?
The converter follows RFC 4180. Fields that contain the delimiter, a double quote, or a newline are wrapped in double quotes, and any embedded double quotes are doubled. Turn on 'Quote every field' to wrap every cell unconditionally — useful for strict downstream parsers or when you want a fully canonical output.
›What is the 'Auto-typing' option for CSV → JSON?
CSV is a stringly-typed format: every cell is text. With auto-typing enabled, the converter promotes values that look like numbers, true/false, or null to their JSON-native types. Disable it if you want every cell preserved as a string — useful when leading zeros, phone numbers, or IDs must not be reformatted.
›Does the converter handle quoted fields and embedded newlines?
Yes. The CSV parser is RFC 4180-compliant: it recognizes double-quoted fields, escapes inside quotes (""), and newlines that appear inside quoted fields. As long as your CSV follows the spec, the conversion is round-trip safe.
›Is my data sent to a server?
No. Parsing, conversion, and download generation all happen in your browser using built-in APIs (JSON.parse, JSON.stringify, Blob). Your data never leaves your device, which makes the tool safe for sensitive exports such as customer lists, billing records, or API responses.
›Can I convert really large files?
Yes, within the limits of your browser's memory. Files in the low megabytes convert in a fraction of a second on a modern device. For very large exports (hundreds of megabytes), a streaming command-line tool like csvkit, miller, or jq is more appropriate because it does not load the whole document into memory.
More free developer tools
Part of our growing tool belt — all client-side, all free.