JSON to Excel, one sheet per table
Export a parent sheet and a sheet for each nested array, linked by ID, or flatten everything onto one sheet.
The workbook is built on this device. Your JSON is never uploaded. How your data stays local.
Problems
JSON Mill's JSON to Excel converter writes a real Excel workbook (.xlsx) from an array of JSON records. By default the records go on one sheet and each nested array of objects, such as order lines or product variants, goes on its own sheet with a column that links every row back to its parent's ID.
The workbook is built in your browser, so your data is never uploaded. Numbers Excel cannot store exactly, such as 20-digit IDs, are written as text instead of being rounded.
How to convert JSON to Excel
-
Open your JSON. Paste it, drop a
.jsonor.jsonlfile on the workspace, or press Open file. The Table view shows the records JSON Mill found. - Open the export panel. Press Export. On this page the format is already Excel (.xlsx) and Nested arrays is set to Separate sheets, linked by ID.
-
Check the sheets. The summary line lists how many sheets and rows the workbook will have. If the records you want are not the main array, type their path, such as
data.orders, into Records at. - Choose columns. Under Columns, leave out fields, rename headers or reorder them. In sheets mode one list covers every sheet, grouped by sheet.
- Download the workbook. Press Download and open the file in Excel, LibreOffice Calc, Numbers or Google Sheets.
Example: orders and their lines on two sheets
Two orders, each with a lines array. In sheets mode the orders go on one sheet and the lines on another, and every line row starts with the ID of its order.
{
"orders": [
{
"id": 501,
"placed": "2026-10-01",
"customer": "Rosa Diaz",
"lines": [
{ "sku": "MUG-01", "qty": 2 },
{ "sku": "TEA-07", "qty": 1 }
]
},
{
"id": 502,
"placed": "2026-10-02",
"customer": "Sam Okafor",
"lines": [
{ "sku": "BAG-03", "qty": 1 }
]
}
]
}
| id | placed | customer |
|---|---|---|
| 501 | 2026-10-01 | Rosa Diaz |
| 502 | 2026-10-02 | Sam Okafor |
| order_id | sku | qty |
|---|---|---|
| 501 | MUG-01 | 2 |
| 501 | TEA-07 | 1 |
| 502 | BAG-03 | 1 |
The link column is named after the parent array, singular, plus _id: orders gives order_id. If the records have no id field, the column is order_row and holds the parent's row number instead. The order rows do not repeat for each line, which keeps the workbook small and lets you join the sheets with XLOOKUP, a PivotTable or Power Query.
Three ways to lay out nested data
Separate sheets, linked by ID is the default here and the closest match to how the data is shaped: one sheet per kind of record. Use it for orders and lines, products and variants, or customers and addresses.
One row per nested item puts everything on one sheet, with the parent fields repeated on each row. It is easier to filter, but the rows multiply, and long repeated fields such as HTML descriptions can make the file much larger. The export panel warns you and offers to switch to separate sheets.
Join into one cell keeps one row per record, with each nested array in a single cell.
What JSON Mill does about Excel's quirks
- Long numbers. Excel stores numbers as 15-digit doubles. JSON Mill writes a number as a real number cell only when Excel can hold it exactly; anything longer, such as
12345678901234567890, becomes a text cell so no digit is lost. - IDs in scientific notation. Integers of 12 or more digits get a plain number format, so a 14-digit Shopify ID shows in full instead of as
1.54503E+13. - Leading zeros. Codes stored as strings in your JSON, such as
"00123", stay text cells, so the zeros stay. - Dates. Date strings such as
2026-10-01are written as text, exactly as in your JSON, not converted to Excel dates. Convert them in Excel if you need date arithmetic. - True and false. JSON booleans become Excel TRUE and FALSE values.
- Header row. Every sheet has a bold, frozen header row with filter buttons and column widths sized to the data.
- Sheet names. Excel allows 31 characters and no
[ ] : * ? / \in sheet names. JSON Mill shortens and cleans names and keeps them unique.
JSON Mill or Excel's own JSON import?
Excel can import JSON itself through Power Query (Data, then Get Data, then From File, then From JSON). That is a good choice when you refresh the same source every week and know Power Query, because the steps are saved with the workbook.
JSON Mill is quicker for a one-off file: nested arrays become linked sheets in one pass, and you can look through the data as a table first. It also works without Excel installed, and the workbook opens in Google Sheets, Numbers and LibreOffice Calc too.
Options
| Option | What it does |
|---|---|
| Nested arrays | Separate sheets, linked by ID (default on this page), One row per nested item, or Join into one cell. |
| Records at | The array that becomes the main sheet. Leave it empty to let JSON Mill pick the main array of records, or type a path such as orders or data.items. |
| Columns | Include or leave out fields on every sheet, rename headers and change their order. |
| Strip HTML from text | Turns HTML in text fields into plain text, which keeps product descriptions readable in a cell. |
Limits
- An Excel sheet holds at most 1,048,576 rows and 16,384 columns. If a sheet would be larger, JSON Mill stops with a message instead of writing a broken file; export CSV instead, or pick a smaller array.
- A cell holds at most 32,767 characters. Longer text is cut to fit with a note at the end saying how long it was, and JSON Mill tells you how many cells were cut.
- Separate sheets go one level deep: each nested array of objects in the main records gets a sheet. Arrays nested inside those items are joined into a cell on the child sheet.
- Arrays of plain values, such as tags, stay in the parent sheet as one joined cell rather than getting their own sheet.
- JSON Mill writes values, not formulas, charts or formatting beyond the header row and number formats.
- In our engine benchmark a 100 MB catalog became a linked workbook in about 4 seconds; slower devices take longer, and very large workbooks are limited by your device's memory. See the large file viewer for how this was measured.
Questions
- How do I open a JSON file in Excel?
- Drop the file on this page, check the records in the Table view, then press Export and Download. You get an .xlsx file that opens directly in Excel. Alternatively, Excel's Power Query can import JSON (Data, Get Data, From File, From JSON), which suits sources you refresh regularly.
- Is the file a real .xlsx or a renamed CSV?
- A real .xlsx. JSON Mill writes an Office Open XML workbook with one worksheet per table, shared strings, a frozen header row and filters. It opens in Excel without the format warning you get from renamed files.
- How are the sheets linked?
- Each child sheet starts with a link column holding the parent record's
idvalue, named after the parent array, such asorder_idorproduct_id. If the records have noid, the column holds the parent's 1-based row number and is named likeorder_row. - Will Excel round my IDs?
- No. Numbers that need more than 15 significant digits are written as text cells, so every digit stays. Long integers that Excel can store get a plain number format so they do not show in scientific notation. If you export CSV instead, Excel may round such numbers when it opens the file.
Related tools
Last updated