JSON to TSV Converter
Flatten a JSON array into tab-separated rows you can paste straight into Excel or Google Sheets — keys become columns and nested objects become dotted columns.
JSON to TSV Converter
Runs in your browser — nothing you enter is uploaded or stored.
Scratchpad auto-saved
How it works — in four simple steps
No signup and nothing to install — it all runs in your browser.
Add your JSON
Paste it into the left box, press Open file, or drag a .json file onto it. Sample loads a realistic example.
Set the options
Adjust the options above the boxes — the output updates instantly as you change them.
Check the result
Read the status line: it reports rows, keys and any value that couldn't be represented in TSV.
Copy or download
Copy the TSV or download it as a .tsv file. Nothing was uploaded at any point.
Paste the TSV into cell A1 of a spreadsheet and the columns fill themselves.
Features
Nested data flattened
Nested objects become dotted columns (address.city), and arrays of plain values are joined so every row fits the grid.
Private by design
Parsing and conversion run in your browser with JavaScript — your data is never uploaded, logged or stored.
About the JSON to TSV Converter
When you want to eyeball an API response in a spreadsheet, TSV is the quickest route: copy the result here, click a cell in Sheets or Excel and paste — the columns line up without an import dialog. The converter finds the array in your JSON (the top level, or the first array of objects inside it), and turns each object into a row.
Nested objects are flattened to dotted columns (user.address.city), arrays of plain values are joined with semicolons, and arrays of objects are kept as compact JSON in their cell. The column list is the union of every object's keys in first-seen order, so sparse records still line up. Untick Flatten nested keys if you'd rather keep each nested object as JSON in one column.
Fields are separated by tabs with LF line endings and only quoted if they contain a tab, a quote or a line break.
Examples
A paginated API response: the records sit in a data array next to paging metadata, and each record has a nested object and a list.
{
"page": 1,
"data": [
{ "id": 101, "user": { "name": "Ada", "city": "London" }, "roles": ["admin", "dev"], "active": true },
{ "id": 102, "user": { "name": "Alan", "city": "Manchester" }, "roles": ["dev"], "active": false }
]
}id user.name user.city roles active
101 Ada London admin; dev true
102 Alan Manchester dev falseThis output was produced by the converter on this page with the default options — load it with the “API response” preset above and change any option to see the effect.
How JSON maps to TSV
| In JSON | Becomes in TSV |
|---|---|
| Array of objects | one row per object |
Key name | column name |
{"user": {"city": …}} | column user.city |
["a", "b"] | a; b |
| Array of objects inside a row | JSON text in the cell |
null / missing key | empty field |
Things that trip people up
- Object instead of array. If the top level is an object, the first array of objects inside it is used and the status line names it. An object with no arrays becomes one row.
- Wide output. Deeply nested JSON can produce many dotted columns. Untick Flatten nested keys to keep nested objects compact.
- Spreadsheet auto-formatting. Sheets may turn values like 3/4 or 1-2 into dates on paste; format the columns as text first if that matters.
- Booleans. true/false are written as text; spreadsheets usually convert them to TRUE/FALSE.
JSON vs TSV at a glance
| Property | JSON | TSV |
|---|---|---|
| Specification | RFC 8259 (2017) · ECMA-404 | IANA text/tab-separated-values |
| File extension | .json | .tsv / .tab |
| Media type | application/json | text/tab-separated-values |
| Data types | string, number, boolean, null, object, array | text only |
| Comments | No | No |
| Nesting | Unlimited | None (flat rows) |
- JSON: Numbers are parsed as IEEE-754 doubles in JavaScript, so integers above 9,007,199,254,740,991 (2⁵³ − 1) lose precision.
- TSV: The IANA definition has no quoting at all: a field simply may not contain a tab or a line break.