Skip to main content

JSON to Excel

Turn a JSON array into an xlsx spreadsheet that just opens

Columns from every recordNumbers and booleans keep their typeNo data uploaded

JSON data

Result

Last updated: 2026-10-11

About this tool

Handing a colleague raw JSON is less useful than handing them a spreadsheet. This tool converts a JSON array into a proper xlsx file: columns are the union of every field appearing in any record (not just the first row, which would silently drop fields that show up later), nested objects flatten into dotted paths like user.addr.city, numbers and booleans are written with their real types rather than as text, and nulls become genuinely blank cells. The output is a complete, valid Office file you can open with Excel, WPS or Numbers. Everything runs locally in your browser — API responses, user lists and order records never pass through a third-party server.

Features

Columns are the union of all rows

Deriving columns from the first row alone silently drops fields that only appear later — data loss rather than an error. This tool walks every record, taking the union while preserving first-seen order.

Nested objects flattened

user: { name, addr: { city } } becomes two columns, user.name and user.addr.city, with a configurable separator.

Types written correctly

Numbers become numeric cells and booleans become TRUE/FALSE so Excel can sum, filter and sort them — all of which fail if everything is written as text.

Nulls become real blank cells

JSON null produces an empty cell, not the string "null", which Excel would treat as meaningful text and include in statistics.

Chinese sheet names

The worksheet name is configurable and non-Latin names are written correctly and display properly in Excel.

Automatic column widths

Widths are estimated from content, counting CJK characters as two columns wide, so nothing needs dragging open.

How to use

  1. 1

    Paste your JSON

    Paste a JSON array, or upload a .json file.

  2. 2

    Check the preview

    Confirm the detected columns and data look right, adjusting flattening options if needed.

  3. 3

    Name the sheet

    Give the worksheet a name; non-Latin characters are fine.

  4. 4

    Download the xlsx

    Download a file that opens directly in Excel.

Options

JSON data
The top level should be an array; a single object is treated as a one-row table.
Sheet name
Worksheet name; cannot contain : \ / ? * [ ]; maximum 31 characters.
Flatten nesting
When on, nested objects become dotted paths; when off, the whole object is written as JSON text in one cell.
Separator
Connector used when flattening, a dot by default; underscores and others work too.

Common use cases

  • Turning an API response into a spreadsheet for non-technical colleagues
  • Exporting user lists or order records for further analysis
  • Tidying an array from a config file into a comparable table
  • Getting JSON into a filterable table without any programming environment
  • Flattening nested log data into one row per entry for pivoting

FAQ

Questions you may have about this tool

Will Excel complain that the file is corrupt?

No. An xlsx is fundamentally a ZIP archive containing a defined set of XML parts. As long as those parts are structurally correct, any standards-compliant spreadsheet application opens it. The files generated here contain every required part and were validated by actually opening them with Python’s openpyxl — checking the Chinese worksheet name, number and boolean types, special-character escaping and whitespace preservation one by one. Those validation results are frozen into automated tests to catch regressions later.

Why not just use an existing spreadsheet library?

For the same reason as every other tool here: data does not leave the browser. Adding a third-party library does not technically violate that promise, but you cannot verify that the library never phones home, and that doubt is enough to deter people from using it on real data. Everything needed to produce an xlsx — compression and XML assembly — is available natively in the browser, so a self-contained implementation is entirely feasible. The only cost is extra validation work, which is paid for with cross-verification and regression tests.

Do numbers end up as text?

No. Detected numbers are written with a numeric type and booleans as TRUE/FALSE. This matters a lot: written as text, cells show the green warning triangle, SUM returns 0, and sorting compares strings — so "10" sorts before "9". Note however that if the JSON literally contains the string "123" in quotes, it stays text, because that is the genuine type of the source data.

How are nested objects and arrays handled?

Nested objects flatten into dotted paths by default: user: { addr: { city: "Berlin" } } yields a user.addr.city column. Arrays are serialised as JSON text in a single cell by default. Both behaviours are switchable — turning flattening off writes the whole object as JSON text in one cell, which suits cases where you only want to preserve the original structure. There is a depth limit, and exceeding it is reported rather than expanding without bound and blowing up the column count.

Is null different from an empty string?

Yes, and both are preserved. JSON null becomes a genuinely blank cell, while an empty string "" is written as empty text. They look similar in Excel but behave differently under filtering and formulas, so they are not merged. That is also why null is never written as the string "null".

How many rows can I convert?

The theoretical limit is Excel’s own: 1,048,576 rows by 16,384 columns. In practice your browser’s memory binds first — hundreds of thousands of rows will get noticeably slow. There is also a separate, lower column cap, since very wide tables are hard to use; exceeding it produces a notice. Everyday API payloads and exported reports sit far below these limits.

Why is the first column not the field order in my JSON?

Column order follows **first appearance** of each field across all records. If one record lists its fields in a different order, the earliest occurrence wins. This both guarantees every field is included and keeps output order stable and predictable — the same input always yields the same column order.

Can I change the downloaded file name?

Yes — your browser will present a save dialog where you choose the name and location (depending on your browser settings). The worksheet name is set on the page and is a separate thing: the file name identifies the file on disk, while the sheet name is what appears on the tab at the bottom of the Excel window.