tuliq
Runs in your browser

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.

Related tools