NimbusNexus
Free utility · Runs in your browser

A CSV ↔ JSON converter that handles the edge cases.

Convert tabular data between CSV and JSON in your browser. Powered by Papa Parse — handles quoted fields, embedded newlines, and escaped quotes correctly, where hand-rolled parsers fail.

When on, CSV column names become JSON keys. When off, the JSON output is an array of arrays.
OutputAwaiting input
Converted output will appear here…
PRIVACY

Parsing happens in this browser tab via Papa Parse (a battle-tested CSV library) and the native `JSON.parse` / `JSON.stringify` APIs. No data leaves the page; we never see what you convert.

What you get

A real CSV parser, not a `split(",")` regex.

CSV looks simple until you have a field containing a comma, a quote, or a newline. We use Papa Parse — the most-trusted JS CSV library — so the edge cases that break hand-rolled parsers round-trip cleanly.

Quoted fields done right

Fields wrapped in `"…"` can contain commas, quotes (`""` → `"`), and embedded newlines without breaking parsing. Hand-rolled CSV parsers based on `split(",")` get this wrong on day one.

Two-way conversion

CSV → JSON emits an array of objects (or arrays, if you turn off the header). JSON → CSV detects a flat object schema, walks the array, and emits a properly-escaped CSV with a header row.

Five common delimiters

Comma, tab (TSV), semicolon (European CSV), pipe, plus a custom single-character delimiter for the long tail. Auto-applied to both parse and emit.

Header row toggle

Most CSVs have a header row; some do not. Toggle on/off — with header, JSON keys come from the first row; without, the output is an array of arrays.

Live conversion

Every keystroke triggers a re-parse and re-emit. Inputs up to a few megabytes stay responsive; the parser is the standard `papaparse` package, optimized for browser execution.

Row + field count

Status pill shows row count and field count so you can sanity-check the parser made the right shape — common debug for "did my CSV import all 4,832 rows or did it stop at row 23 because of an unescaped quote".

Precise errors

When parsing fails, the error includes the row and the reason. "Unclosed quoted field at row 412" beats "unexpected token" every time.

No sign-up, no logging

Use anonymously. No account, no history, no telemetry. Inspect the network tab — there is nothing outbound.

Common uses

Wherever tabular data has to change shape.

IMPORT
Convert a spreadsheet export to API payload

You export a spreadsheet to CSV and the API wants `application/json`. Paste the CSV, copy the JSON, post the request. No one-off Python script required.

name,email,plan → [{"name":"…","email":"…","plan":"…"}]
EXPORT
Generate a report from a JSON dump

You have a JSON array of objects from your analytics API and the stakeholder wants it in Excel. Convert to CSV, send it on, get on with your day.

[{"day":"…","clicks":42}] → day,clicks
DEBUG
Validate a malformed CSV

When a CSV import fails on the receiving end, the parser here surfaces the offending row. Often it is an unescaped quote, an embedded comma, or a stray BOM — fix once, retry.

"Smith, John",… → row 23: unclosed quote
SEED
Build database fixture data

Take a CSV of test data and convert to JSON for a database seed script. Toggle the header row, copy, paste into your `seed.json`.

CSV → fixtures/users.json
TRANSFORM
Switch delimiters

Sometimes you receive `;`-delimited CSV (German Excel default) but the downstream tool wants commas. Paste in with `;`, switch to comma, copy out.

a;b;c → a,b,c
AUDIT
Count rows and fields

Quick sanity-check: paste the CSV, read the row count off the status pill. Verifies the file is the size you expected before importing.

4,832 rows · 7 fields
FAQ

CSV ↔ JSON, the plain answers.

Why is hand-rolled CSV parsing risky?

CSV looks like comma-separated values until you have a field containing a comma. The spec (RFC 4180) says wrap it in quotes — but then the field can contain a quote (escaped as `""`), or a newline, or a leading BOM, or a different line-ending convention. A correct parser is ~200 lines of state machine; we use Papa Parse, which has been tested on every edge case people have hit since 2014.

What happens with nested JSON?

CSV is fundamentally flat — a single row maps to a single record. When converting JSON → CSV, nested objects and arrays are stringified into a single cell (so `{"meta": {…}}` becomes a column with JSON in it). You will see a warning when this happens; for properly tabular output, flatten the JSON first.

How does the header row toggle work?

When **on** (default), CSV → JSON treats the first row as column names and emits an array of objects keyed by those names. JSON → CSV emits a header row from the first object's keys. When **off**, both directions deal in array-of-arrays — no keys, just positional fields.

What about file uploads?

Not in the current build — paste works for inputs up to a few megabytes (~10k rows of moderate width). For really large CSVs, paste a representative slice to validate the shape, then run the actual conversion via a CLI tool like `csvkit` or the streaming Papa Parse API in Node.

Will my data be sent to a server?

No. Parsing runs entirely in this browser tab via Papa Parse and `JSON.parse`. The page makes no network calls related to your input. Open DevTools → Network and watch nothing happen as you paste.

What about TSV, PSV, and "European CSV"?

All supported — pick the right delimiter (tab, pipe, semicolon) from the dropdown. The CSV spec is really a family of formats varying by delimiter and quoting convention; one config covers most of them. For exotic dialects (fixed-width, ASCII Record Separator etc.) you will need a dedicated parser.

When you need more

Building pipelines that move tabular data between systems?

Sign up for the free tier and you get $100 in credits, plus VMs, managed PostgreSQL with native CSV import (`COPY`), object storage, and zero-config autoscaling across four regions.