How to convert JSON to CSV (and back)
This converter turns a JSON array of objects into a flat CSV table, and turns delimited CSV back into clean, typed JSON. Pick a direction with the toggle, paste your data into the left pane (or drag a file in), and press Convert. The result appears on the right, ready to copy or download. There is no upload, no queue, and no account — the conversion is a local JavaScript operation that finishes in milliseconds.
The typical input for JSON → CSV is an array of objects, where each object becomes one row and each key becomes a column header. If you paste a single object instead of an array, it is treated as a one-row table. For CSV → JSON, the first line is read as the header row and each subsequent line becomes an object keyed by those headers, with numbers and booleans automatically detected so you get true rather than the string "true".
How nested objects and arrays are handled
Real-world JSON is rarely flat, and CSV has no concept of nesting — so the converter flattens structure deterministically. A nested object such as { "user": { "name": "Ada", "role": "admin" } } becomes two columns, user.name and user.role, using dot notation that round-trips predictably. Arrays are preserved as compact JSON strings inside a single cell, so no information is silently dropped. This keeps the output human-readable in a spreadsheet while remaining lossless enough to reconstruct the original shape when you need to.
Because the rules are explicit and code-driven, the same input always produces the same output. That determinism is the whole point: when you are reconciling an export, feeding a data pipeline, or diffing two snapshots, you cannot afford a tool that occasionally reorders columns or guesses at types.
Why a local converter beats pasting into an AI
It is now common to drop a blob of data into a chatbot and ask it to "make this a CSV." For throwaway sample data that is fine. For anything real it is a poor idea on two fronts. First, privacy: production logs, customer records, billing exports, access tokens and internal identifiers should not be transmitted to a third-party model that may retain or train on the content. Once data leaves your machine you have lost control of it. Second, correctness: a language model can transpose fields, truncate long inputs, silently skip rows, or "tidy up" values in ways that corrupt the dataset. A dedicated parser does none of that — it applies the CSV specification exactly and returns every row.
gitime.dev is built around this distinction. Generating a one-off snippet is something AI does well. Processing your actual data — parsing, converting, decoding, validating — is work that belongs in a deterministic tool that runs where the data already lives: your browser tab. Nothing here phones home, so you can convert a file full of personal information without it ever touching a server.
Working with large files
Skipping the upload step is not just a privacy win, it is a speed win. There is no round-trip to a server and no file-size cap imposed by an API, so multi-megabyte exports convert about as fast as your CPU can parse them. Drag a .json or .csv file straight onto the input area and the converter reads it locally and detects the direction from the file extension. If a file is large the status line tells you it is reading, then reports how many rows were processed and how long it took.
Format details you can rely on
- Headers are taken from object keys (JSON → CSV) or the first CSV line (CSV → JSON).
- Quoting follows RFC 4180 — fields containing commas, quotes or newlines are quoted and escaped automatically.
- Types are inferred on CSV → JSON so numeric and boolean columns come back as real numbers and booleans.
- Empty lines are skipped rather than turned into blank rows.
- Errors are reported with the offending row instead of failing silently.
Together these defaults mean you can paste an unfamiliar export and trust the result without hand-checking every row. When you do need to reverse a conversion, the Swap button moves the output back into the input and flips the direction in one click.
Frequently asked questions
- Is my data uploaded to a server?
- No. Everything runs as JavaScript inside your browser. Your JSON or CSV is never sent over the network, which makes the tool safe for sensitive or proprietary data.
- How are nested JSON objects handled?
- They are flattened with dot notation —
user.name,user.role— and arrays are stored as compact JSON strings in a single cell, so nothing is lost. - Does it support large files?
- Yes. With no upload step, large files parse quickly. Drag and drop a
.jsonor.csvfile directly onto the input. - Why not just ask an AI to convert it?
- A parser is deterministic and private: identical correct output every time, and your data never leaves the device. An AI can hallucinate on edge cases and exposes the content to a third party.