ConverterNew

JSON to Excel Converter with Nested Object Flattening

Turn JSON arrays and nested objects into an .xlsx spreadsheet with dot-path columns

100% client-side — your data never leaves your browserNo data stored or uploadedFree for lifetime · No signup
…or upload a .json file

Drop a file here or browse

Read locally in your browser — nothing is uploaded

Nested arrays

What the JSON to Excel converter produces

Paste JSON or drop a .json file and the tool builds a real .xlsx workbook — not a CSV renamed to .xlsx — with a bold, frozen header row and columns sized to their content. Numbers stay numeric and booleans stay TRUE/FALSE, so you can sort, filter and sum straight away, while strings are written exactly as they are, leading zeros included.

Everything happens in your browser. The JSON is parsed with JSON.parse, flattened in JavaScript and packed into the XLSX format locally, which matters when the data is an API response full of customer records, tokens or internal IDs that should not be pasted into a third-party server.

How each JSON shape is mapped to sheets

An array of objects is the common case — the output of most REST endpoints and database exports. Each object becomes a row, and the columns are the union of every key that appears in any object, in the order they are first seen, so a field present only in record 500 still gets a column; rows that lack it get an empty cell.

Nested objects are flattened into dot-path columns: {"address": {"city": "London", "geo": {"lat": 51.5}}} becomes address.city and address.geo.lat. Arrays are the awkward part, because a list does not fit in one cell. By default they are kept as compact JSON text such as ["admin","beta"], which is lossless and easy to parse back. Switch to "Expand to columns" and each element gets its own indexed column — tags.0, tags.1, and items.0.price for arrays of objects — which suits short, fixed-length lists better.

Other shapes work too. An array of arrays is written as rows exactly as given, the natural format for tabular data that already has a header row inside it. An array of plain values becomes a single "value" column. A single object becomes one row. An object whose values are all arrays — {"users": [...], "orders": [...]} — becomes a workbook with one sheet per key, named after the key, which is the quickest way to turn a multi-collection export into a tabbed spreadsheet.

Limits worth knowing

Excel caps a cell at 32,767 characters and a sheet at 1,048,576 rows and 16,384 columns; longer text is truncated to fit. Sheet names are limited to 31 characters and may not contain [ ] : * ? / or \, so keys like "2024/Q1" are cleaned to "2024_Q1" and duplicates receive a numbered suffix. JSON numbers outside the range of a double, or integers above 2^53, are already rounded by JSON.parse before the conversion starts; keep such IDs as strings in the source JSON. Very deep or very wide objects work but produce correspondingly wide sheets, so trimming the payload first with jq or a quick script often gives a more readable result. If the JSON fails to parse, the error message from the parser is shown so you can fix it — or run it through the JSON formatter first. Going the other way, the Excel to JSON tool turns a sheet back into an array of objects.

How to use the JSON to Excel Converter with Nested Object Flattening tool

  1. 1

    Paste or upload JSON

    Paste an API response or drop a .json file. Arrays of objects, arrays of arrays and objects of arrays are all accepted.

  2. 2

    Choose how arrays are handled

    Keep nested arrays as JSON text, or expand them into indexed columns such as tags.0 and tags.1.

  3. 3

    Preview the sheets

    Check the columns and rows of each sheet in the preview table before exporting.

  4. 4

    Download the .xlsx

    Download the workbook with a bold, frozen header row and open it in Excel, Google Sheets, LibreOffice or Numbers.

Frequently asked questions

Is my JSON sent to a server?

No. Parsing, flattening and building the XLSX file all happen in your browser. Nothing you paste or upload leaves your device.

How are nested objects converted?

They are flattened into dot-path column names, so {"user": {"name": "Ada"}} becomes a user.name column. Empty objects become an empty cell.

What happens to arrays inside objects?

By default they are written as JSON text in a single cell, which loses nothing. Choose "Expand to columns" to give each element its own indexed column instead.

Can I get multiple sheets?

Yes. Give the converter an object whose values are arrays, such as {"users": [...], "orders": [...]}, and each key becomes its own sheet.

Does it create a real Excel file or a CSV?

A real .xlsx workbook in the Office Open XML format, with typed number and boolean cells, a bold frozen header row and column widths, which Excel opens without any import dialog.

Related on TechLogHub

Get the next tool before you need it

One email a week: new and trending developer tools, fresh comparisons, and what shipped. Unsubscribe in one click.