JSON to Excel (.xlsx) Converter
Turn JSON into a real Excel workbook: an array becomes a sheet, several arrays become several sheets, nested objects become dotted columns, and numbers stay numeric.
JSON to Excel (.xlsx) 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 Excel (.xlsx).
Download the workbook
Press Download .xlsx — the file is built in your browser and saved straight to your device.
An object with several arrays becomes a workbook with one sheet per array.
Features
Nested data flattened
Nested objects become dotted columns (address.city), and arrays of plain values are joined so every row fits the grid.
Real .xlsx output
A genuine Office Open XML workbook with a bold, frozen header row, an AutoFilter and sized columns — no library and no upload.
Multi-sheet workbooks
When your JSON holds several arrays, each one can become its own sheet in the same .xlsx file.
Private by design
Parsing and conversion run in your browser with JavaScript — your data is never uploaded, logged or stored.
About the JSON to Excel (.xlsx) Converter
API responses, database exports and log dumps are JSON; the people who need to read them often live in Excel. This converter flattens your JSON into rows and writes a genuine .xlsx file — no CSV step in between, so numbers, booleans and long text keep their types and there are no encoding surprises.
If your JSON is an array, it becomes one sheet. If it's an object containing several arrays of objects — say {"customers": […], "orders": […]} — and One sheet per top-level array is ticked, each array becomes its own sheet named after its key (trimmed to Excel's 31-character limit). Nested objects are flattened into dotted columns like shipping.city; lists of plain values are joined with semicolons; lists of objects inside a row are stored as JSON text.
Every sheet gets a bold, frozen header row with an AutoFilter, and columns are sized to their content. The workbook is assembled in your browser, so the data never leaves your device.
Examples
A shop export with two arrays — customers and orders — which become two sheets. This is the first one.
{
"customers": [
{ "id": 1, "name": "Ada Lovelace", "shipping": { "city": "London", "country": "GB" }, "vip": true },
{ "id": 2, "name": "Alan Turing", "shipping": { "city": "Manchester", "country": "GB" }, "vip": false }
],
"orders": [
{ "order": "A-1042", "customer": 1, "total": 37.5, "items": ["TF-MUG", "TF-MUG", "TF-CAP"] },
{ "order": "A-1043", "customer": 2, "total": 19, "items": ["TF-TEE"] }
]
}| id | name | shipping.city | shipping.country | vip |
|---|---|---|---|---|
| 1 | Ada Lovelace | London | GB | TRUE |
| 2 | Alan Turing | Manchester | GB | FALSE |
The workbook also contains: sheet “orders”.
This output was produced by the converter on this page with the default options — load it with the “Shop export” preset above and change any option to see the effect.
How JSON maps to Excel (.xlsx)
| In JSON | Becomes in Excel (.xlsx) |
|---|---|
| Top-level array | one sheet |
| Object with several arrays | one sheet per array, named after the key |
Key name | column name |
Nested {"shipping": {"city": …}} | column shipping.city |
| Number / boolean | numeric / TRUE-FALSE cell |
["a", "b"] | text a; b |
null | empty cell |
Things that trip people up
- Very wide sheets. Deeply nested data creates many columns. Untick Flatten nested keys to keep nested objects as JSON text in a single column.
- Big integers. Excel keeps 15 significant digits, and JavaScript parses JSON numbers as doubles. Send long IDs as strings in the JSON to keep every digit.
- Dates are text. ISO date strings are written as text cells; convert the column with Data → Text to Columns if you need real Excel dates.
- Single object. An object without arrays becomes a one-row sheet — wrap it in [ ] or convert a list of them.
JSON vs Excel (.xlsx) at a glance
| Property | JSON | Excel (.xlsx) |
|---|---|---|
| Specification | RFC 8259 (2017) · ECMA-404 | ECMA-376 / ISO/IEC 29500 (Office Open XML) |
| File extension | .json | .xlsx |
| Media type | application/json | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Data types | string, number, boolean, null, object, array | number, text, boolean, date (as a serial number), formula |
| Comments | No | Cell notes |
| Nesting | Unlimited | None (grid; several sheets) |
- JSON: Numbers are parsed as IEEE-754 doubles in JavaScript, so integers above 9,007,199,254,740,991 (2⁵³ − 1) lose precision.
- Excel (.xlsx): A sheet holds at most 1,048,576 rows × 16,384 columns (A to XFD), a cell at most 32,767 characters, and numbers keep 15 significant digits.