JSON ↔ CSV Converter
Convert between a JSON array of objects and CSV, in both directions — paste directly or upload a .json/.csv file, which auto-switches the direction to match. Nested objects flatten into dot-notation columns (address.city) on the way to CSV and un-flatten back into nested objects on the way back; values that look like clean JSON (numbers, true/false, null) are recovered to their real types, while anything else stays a string. Runs entirely client-side — nothing is uploaded.
About this tool
This tool converts between a JSON array of objects and CSV, in both directions. Both formats represent the same kind of data — rows with named fields — but structured completely differently: JSON nests naturally, CSV is strictly flat rows and columns. Converting JSON to CSV flattens any nested object into dot-notation column names (an address object with a city field becomes a column literally named "address.city"), and converting back reverses that exact process, reconstructing the nested structure from the dotted column names. Arrays inside an object are JSON-stringified into a single cell rather than flattened, since a variable-length list has no fixed column structure to flatten into. Going CSV → JSON, every cell is text by definition, so this tool recovers values that look like clean JSON — numbers, true/false, null — back into their real types, while anything that isn't valid JSON (an ordinary word, a sentence, a zero-padded code like "01234") stays a plain string rather than being coerced incorrectly. It runs entirely client-side — your data is converted locally in your browser and never uploaded anywhere.
What you can do
- Convert a JSON array of objects to CSV, or CSV back to JSON — both directions
- Paste your data directly, or upload a .json/.csv file
- Nested objects flatten into dot-notation columns (address.city) and un-flatten back
- Copy the result or download it as a .csv/.json file
- Nothing is uploaded — every conversion happens locally in your browser
How to use
Step 1
Pick a direction
JSON → CSV or CSV → JSON — conversion happens instantly as you type, paste, or upload a file.
Step 2
Add your data
Paste it directly, or upload a .json/.csv file — uploading auto-switches the direction to match the file.
Step 3
Copy or download
Copy the result, or download it as a real .csv or .json file.
Example
This JSON:
JSON
[
{ "name": "Alice", "address": { "city": "NYC" } }
]CSV
name,address.city Alice,NYC
converts to that CSV and back — the "address.city" column name is exactly how the nested address.city field round-trips through a format that has no concept of nesting.
How your data is handled
This tool is labeled 🟢 Browser: your JSON or CSV is parsed and converted directly in your browser using standard JSON and CSV parsing — nothing is uploaded to a server, and nothing about it is retained once you leave the page.
Frequently asked questions
Why do nested objects turn into columns with dots in the name?+
CSV has no way to represent nesting — flattening an address object's city field into a column literally named "address.city" is the standard way to preserve that structure in a flat format, and converting back reverses it exactly, reconstructing the nested object from the dotted name.
What happens to arrays inside my JSON?+
They're written into a single cell as a JSON string (e.g. ["a","b"]) rather than flattened into separate columns, since a variable-length list has no fixed column structure to flatten into. Converting back parses that cell straight back into a real array.
Why did my CSV number/true/false come back as a string instead of a number?+
It only converts back to its real type if it's unambiguously valid JSON — "42" and "true" become a real number and boolean, but "01234" (a leading zero makes it invalid JSON number syntax) stays a string on purpose, which is exactly what protects a zip code or account number from silently losing its leading zero.
Why does it say my JSON isn't valid for conversion?+
JSON → CSV expects either an array of plain objects or a single plain object (treated as one row) — an array of numbers, strings, or anything else that isn't an object doesn't have named fields to become columns.
Can I upload a file instead of pasting?+
Yes — the file picker next to the input box accepts .json or .csv depending on the current direction, and uploading a file automatically switches the direction to match it (so dropping in a .csv file while still set to JSON → CSV won't just fail to parse).
Is my data uploaded anywhere?+
No — whether pasted or loaded from a file, conversion happens directly in your browser using standard JSON and CSV parsing and the File API. Nothing here ever leaves your device.