JSON to TSV Converter
Flatten JSON objects into a tab-separated table — the format that pastes cleanly into Excel and Google Sheets cells, with no comma-escaping headaches to worry about.
Why tab-separated instead of comma-separated
TSV is CSV's quieter cousin: same idea of a flat table, but columns are split by tab characters instead of commas. That single change avoids a whole category of escaping problems, because real-world text contains commas far more often than it contains tabs — so values rarely need quoting at all.
This converter flattens each object so nested fields become underscore-joined column names, collects the headers from across every record, and writes one tab-delimited row per object. Primitive arrays are joined with semicolons so they fit in a single cell.
The big practical win is pasting: when you copy TSV and paste it into Excel or Google Sheets, the tabs are interpreted as column breaks automatically, dropping your data neatly into cells with no import dialog.
Convert JSON to TSV
- 1
Provide your JSON
Paste an array of objects (or a single object) into the input pane.
- 2
Get the table
A tab-separated header row plus one row per record appears on the right.
- 3
Paste or download
Copy and paste straight into a spreadsheet, or save the .tsv file.
Where TSV shines
Paste-into-cells workflow
Spreadsheets treat tabs as column separators, so pasted TSV lands in the right cells instantly.
Fewer escaping issues
Tabs are rare inside data, so most values need no quoting — the output stays clean and simple.
Consistent columns
Headers are gathered from every object, so rows with different shapes still align under the same columns.
Local and private
Flattening and formatting happen in your browser; your records aren't uploaded.
A worked example
Tabs (shown here as gaps) separate the columns; paste this into a spreadsheet and it fills cells directly.
[
{ "id": 1, "name": "Ada", "tags": ["go", "rust"] },
{ "id": 2, "name": "Grace" }
]id name tags
1 Ada go;rust
2 Grace How records are flattened
- Nested objects are flattened with underscore-joined keys, so
{"geo":{"lat":1}}becomes ageo_latcolumn. - Primitive arrays are joined into one cell with semicolons to keep one row per record.
- Arrays of objects are expanded by index into separate indexed columns.
- The header row is the set of all keys seen across the input, so columns stay consistent between rows.
Frequently asked questions
The only difference is the delimiter: TSV separates columns with tab characters, CSV uses commas. TSV pastes more cleanly into spreadsheet cells and usually needs no quoting because tabs rarely appear inside data.
They're flattened into columns using underscore-joined keys. A field at geo.lat becomes a column named geo_lat, so nothing nested is lost — it just moves into the header.
An array of simple values is joined into one cell with semicolons. An array of objects is expanded by index into separate indexed columns.
Because tabs almost never occur inside real data, TSV values usually don't need quoting. The output keeps values bare for clean pasting; just avoid embedding literal tab or newline characters in your data.
Yes. Copy the TSV output and paste it into a sheet — the tabs are interpreted as column breaks, so each value lands in its own cell automatically.
Yes. It runs entirely in your browser, so the JSON you paste never leaves your device.
Need another tool?
Browse the full toolbox or dig into the blog for the engineering behind it.