Free online CSV to JSON and JSON to CSV converter. Quoted fields, custom delimiters and headers handled. Runs in your browser; your data is never uploaded.
Convert between CSV and JSON in both directions. Quoted fields and custom delimiters supported.
Switch between CSV → JSON (turn a spreadsheet export into an array of objects) and JSON → CSV (turn an array of records into a spreadsheet). Both directions run instantly as you type.
Paste your CSV or JSON. Pick the delimiter (comma, semicolon, tab or auto-detect), choose whether the first row is a header, and for JSON output choose pretty or minified. Quoted fields, escaped quotes and line breaks inside cells are handled per RFC 4180.
Copy the converted result or download it as a .json or .csv file. If the input is malformed you get a clear message — invalid CSV points to the line, invalid JSON tells you why.
No. Parsing and conversion happen entirely in your browser with JavaScript — your CSV or JSON never leaves your device and nothing is uploaded. That matters when the data is a customer export, a price list, financial rows or anything you'd rather not paste into a site that logs it. Public converters have leaked exactly this kind of business data before; here it stays local.
Yes. The parser follows RFC 4180: fields wrapped in double quotes can contain the delimiter, double quotes (escaped by doubling them, ""), and even line breaks — all preserved correctly. It reads both LF and CRLF line endings and supports comma, semicolon and tab delimiters, with auto-detection from the header row. When writing CSV, any value containing a delimiter, quote or newline is automatically quoted and escaped.
CSV is a flat, two-dimensional format, so it can't represent nesting natively. When converting JSON → CSV, any nested object or array inside a record is serialised as compact JSON text inside a single cell rather than spread across columns. This is unambiguous and round-trips back, but it's not a true flattening — if you need nested fields as separate columns, flatten the JSON before converting. We're upfront about this rather than silently dropping data.
An array is required. An array of objects becomes a table whose header is the union of all keys, in the order they first appear; rows missing a key get an empty cell. An array of arrays is written row-for-row. An array of primitives becomes a single 'value' column. A bare object, number or string isn't a table — wrap it in [ ... ] first. You'll get a clear ERR_CSV_JSON_NOT_ARRAY message explaining this rather than a broken file.