Skip to content
briskly.tools
· briskly / dev tools / json to csv
· bidirectional · no signup

JSON to CSV converter.

Convert JSON to CSV or CSV to JSON with nested-object flattening, custom delimiters, header toggle, and Excel-compatible output. Browser-only, no signup, nothing uploads.

free · foreverbidirectionalin-browser

related: json to excel · csv to json

··
329 chars
3 rows · 7 columns

· converts in your browser · nothing uploads · localStorage persists your last input

What CSV is, in one paragraph

CSV (comma-separated values) is a plain-text format where each line is a record, each record has fields separated by a delimiter (usually a comma), and the first line is typically the column headers. It's older than every spreadsheet program that reads it, and it's the universal lowest-common-denominator data exchange format. The corner cases — fields that contain the delimiter, fields that contain line breaks, fields that contain quotes — are handled by wrapping those fields in double quotes and doubling any quote inside them. Everything else is just text and newlines.

What flattens and what doesn't

With "flatten nested" on, the converter walks your JSON objects and produces dot-notation column names so nothing is lost:

// Input JSON
{ "user": { "name": "Ada", "city": "London" } }

// Flattened CSV columns
user.name, user.city

Arrays of primitives (strings, numbers) are joined with semicolons to stay on one line. Arrays of objects are indexed: items[0].name, items[1].name. Turn flattening off if you'd rather keep nested objects as a single JSON-stringified cell.

Common workflows

  • API response → spreadsheet. Paste the JSON you got back from an API, download as CSV, open in Excel / Google Sheets / Numbers. Best for analyzing results, sharing with non-technical teammates.
  • Spreadsheet → seed data. Have a CSV of test data? Use CSV → JSON direction to produce an array of objects you can paste into a fixtures file, seed script, or migration.
  • Data cleanup. Move back and forth between formats to sanity-check field values, spot missing data, or rename columns. The tool is fast enough to iterate on.
  • Reporting. Pipeline outputs JSON; stakeholders want CSV. Save the round-trip through a script.

Related tools and references

  • JSON to Excel — same tool, defaults tuned for opening directly in Excel (BOM on, CRLF line endings, always-quoted).
  • CSV to JSON — reverse-direction landing with its own explainer.
  • How to create a CSV file — the different ways (spreadsheet, script, this tool) and when each is right.
  • Regex tester — useful when your CSV has malformed fields you need to clean with a find-and-replace.

FAQ

How do I convert JSON to CSV?

Paste your JSON into the input panel — either an array of objects like [{...}, {...}] or a single object. The CSV output appears on the right automatically. Choose your delimiter (comma, semicolon, tab, etc.), toggle the header row, and enable 'flatten nested' if your objects have sub-objects you want to expand. Click Download to save the file, or Copy to put it on your clipboard.

What if my JSON has nested objects?

Leave 'flatten nested' checked (the default). Nested objects become flat columns using dot notation: {user: {name: 'Ada'}} becomes a column named user.name. Arrays of primitives like [1, 2, 3] are joined with semicolons. Arrays of objects are indexed: users[0].name, users[1].name, etc. Uncheck 'flatten nested' if you want nested objects JSON-stringified into a single cell instead.

How do I open the CSV output in Excel correctly?

Enable the 'Excel BOM' checkbox before you download. This prepends a UTF-8 Byte Order Mark so Excel interprets non-ASCII characters (accents, emoji, CJK) correctly when you double-click the file. Also set line endings to CRLF (the default on our Excel-focused sub-page). For international users, the Excel BOM setting is what prevents the classic 'my names show up as gibberish in Excel' problem. See our dedicated /json-to-csv/json-to-excel page for Excel-first defaults.

Can I convert CSV to JSON?

Yes — click the CSV → JSON direction toggle (or hit the ↔ swap button). The CSV parser handles quoted fields, escaped quotes, and newlines inside fields. You can choose whether the first row is a header (the default), whether to auto-parse numeric-looking strings as numbers, and whether true/false strings become booleans. Output is pretty-printed JSON.

What delimiter should I use?

Comma is the default and what most tools expect. Semicolon is common in European locales where comma is the decimal separator — if your data contains decimal numbers and you're exchanging with European spreadsheets, semicolon avoids conflict. Tab (TSV — tab-separated values) is common for scientific data and is handled natively by most spreadsheet paste operations. Pipe and colon are less common but useful when your data contains all the other separators.

How does this handle very large files?

Everything runs in your browser, so file size is limited by browser memory — roughly up to ~100MB of text in modern browsers before you start seeing noticeable lag. For truly large files (millions of rows), a streaming converter on the command line is the right tool — try `jq -r '(.[0] | keys_unsorted) as $keys | $keys, (.[] | [.[$keys[]]]) | @csv' input.json > output.csv` for jq, or `csvkit` for CSV→JSON.

Is anything I paste uploaded?

No. Parsing and conversion happen entirely in your browser using native JavaScript. No network request is made, nothing is logged, nothing is sent to a server. Your last input and options are persisted in localStorage for convenience; that data never leaves your browser.

How do I convert between JSON and Excel?

Excel opens .csv files natively — it's the simplest interchange format. Generate a CSV here with 'Excel BOM' enabled and 'CRLF' line endings, double-click the file, and Excel opens it correctly. For true .xlsx output, use our /json-to-csv/json-to-excel page, which defaults to Excel-compatible settings and explains the full flow. True .xlsx requires a separate library; CSV covers 95% of cases.

Does this handle JSONLines (NDJSON)?

Not automatically. If you have one JSON object per line (newline-delimited JSON), wrap them in [ ] and separate with commas to make a regular JSON array before pasting. For large NDJSON files, a command-line tool like jq is better suited: `jq -s '.' input.ndjson` converts it to a standard array.