Blog Productivity Tools Nested JSON to Excel Comes Out...
Nested JSON to Excel Comes Out Blank or Messy? Flatten It First
Productivity Tools Oct 22, 2026 5 min read 12 views

Nested JSON to Excel Comes Out Blank or Messy? Flatten It First

Excel cells hold one value each and JSON nests objects inside objects. Here's why nested JSON to Excel goes wrong, and the flattening rules that give you clean columns.

D
Daniel
Author

If your nested JSON to Excel conversion gave you empty columns, columns full of raw braces, or forty columns called items.0.sku through items.39.qty, the file isn't broken. A worksheet cell holds one value. JSON can hold an object inside an object inside a list. Something has to decide how that tree becomes rows and columns, and if you don't decide, the converter guesses. Flatten the JSON first and the problem goes away: nested objects become dot-path columns like customer.address.city, and lists become extra rows or a second sheet.

That's the whole answer. The rest is the detail you need to do it without losing data or double-counting money.

Why nested JSON to Excel breaks

Take a typical export from a shop or an API. Each order has an id and a total, a customer object with an address object inside it, and an items list with one entry per product. Three levels deep is normal.

I ran a small sample like that through the JSON to Excel converter here to see exactly what a straight conversion does. Every top-level key became a column header: order_id, placed, customer, items, total, and coupon. Coupon only appeared on one order, but it still got a column, left blank on the other rows. That part is fine. The customer and items columns were the problem. Both headers were there and every cell under them was empty, because the library that writes the workbook (SheetJS 0.18.5) treats an object value as a cell description instead of as data. Your text went in and nothing came out.

The JSON to Excel converter's Paste JSON tab holding two orders, each with a nested customer object and an items list, marked as valid JSON above a Convert to XLSX button.

Other tools fail differently. Some write the nested part as a JSON string, so a single cell reads {"name":"Dana Ruiz","email":"[email protected]","address":{...}}. Our JSON to CSV converter does that, which at least keeps everything, but you can't filter by city when the city is buried in a string. Others expand every list into numbered columns, and the sheet ends up as wide as the longest order. No setting fixes this. The shape of the data is wrong for a grid.

Flattening nested JSON for Excel: three rules

Objects become dot paths. customer.name, customer.email, customer.address.city, customer.address.zip. One column per leaf value. The row count doesn't change and nothing is lost. This is safe to do every time.

Lists of objects become rows. An order with two items turns into two rows, each repeating the order fields and carrying one item.sku and item.qty. That's the layout pivot tables and SUMIFS want. Avoid the numbered-column version (items.0.sku, items.1.sku). You can't sum quantities across it, and a new order with more items than any earlier one adds columns.

Lists of plain values get joined. Tags like ["gift", "rush"] fit in one cell as gift; rush. Splitting them into rows is rarely worth it.

One trap with the second rule. Once order 1041 becomes two rows, its 47.5 total appears twice, and a SUM over that column now says 95. Either total at item level (qty times price), or count each order once with a helper column. On a month of real orders, where most baskets hold two or three products, that mistake can double or triple your revenue line, and nobody questions a number that looks good.

The converter with flattened order JSON pasted in, using keys like customer.name and item.sku with one object per item, showing Conversion Complete and a Download File button.

A second sheet instead of repeated rows

If you'd rather keep orders one per row, put the items on their own sheet and give every item row the order_id. In the converter mentioned above, a JSON file whose top level is an object holding arrays, like {"orders": [...], "items": [...]}, gets one worksheet per key. Sheet names are cut to 31 characters and any of : \ / ? * [ ] becomes an underscore, because Excel won't accept those in a tab name. The arrays still have to be flat for their cells to fill.

Doing nested JSON to Excel inside Excel with Power Query

In Excel for Microsoft 365 you can skip the outside step. Go to Data, Get Data, From File, From JSON. Microsoft's page on the Power Query JSON connector says it uses automatic table detection to flatten the JSON into a table, and that's mostly true for the first level. Deeper records still show up as columns with an expand button in the header. Click it, pick the fields you want, and they become customer.name style columns. For a list column, choose Expand to New Rows, which is rule two above done for you.

The query also refreshes: drop a newer export in the same path, click Refresh, and every expand step runs again. The same page also mentions that JSON Lines files (one object per line) fail with an unable to connect message and gives a short M snippet to read them line by line.

For scripts, Python's pandas does the same job in one call:

pd.json_normalize(orders, record_path="items", record_prefix="item.", meta=["order_id", "total", ["customer", "name"]])

That gives one row per item, with the order fields repeated, item.sku and item.qty columns, and a customer.name column. Call .to_excel() on the result and you're done.

My advice: if it's a one-off file under a few thousand records, flatten it and convert. If it's a feed you'll pull every week, build it once in Power Query and let Refresh do the work. Pasting nested JSON straight into any converter and hoping it guesses right is how you end up with the empty columns you started with.