Convert JSON to XLSX

Converting JSON to XLSX turns an export into a spreadsheet a colleague can open, sort and filter — with the column types written into the file, so Excel has nothing left to guess at. It runs entirely in your browser and nothing is uploaded.

  • Where it runs In your browser. The file is never uploaded.
  • Rebuilt XLSX works differently from a JSON, so this is not the gradual degradation a lossy codec applies. What XLSX can express is reproduced faithfully; what it has no equivalent for does not survive at all.
  • File size limit Up to 100 MB per file, free, without an account.
  • Worth knowing Nested objects are flattened into columns. Deeply nested data loses its shape.

Up to 100 files at once. Mixed formats are fine.

This conversion is for a person, not a program

That is the whole distinction from converting to CSV, and it decides everything else. A program wants CSV: it streams, every import routine reads it, and it carries no formatting to get in the way. A person wants a workbook that opens with the columns the right width, the headers already a header row, and the types already correct.

If the data is going into a database, a script or an analysis pipeline, CSV is the better answer and this is the wrong page. If it is going to a colleague who will look at it, sort it and add a column, this is the one.

The types are declared, which is the real gain

A CSV has no types at all. Excel opens one by guessing a type for every column, and that guess is where the familiar damage happens: leading zeros vanish from postcodes and product codes, anything date-shaped becomes a date, and identifiers past fifteen digits lose their last digits to floating point.

An XLSX declares what each cell is, so nothing is inferred and nothing is rewritten on opening. That single difference removes an entire category of support conversation, and it is the reason to spend the extra step rather than sending a CSV and an explanation.

How the records become a sheet

Each record becomes a row and each key becomes a column, with the header row taken from the keys themselves. Records that do not all share the same keys are reconciled by building the full set of columns across the file and leaving empty cells where a record has nothing to put.

That reconciliation is worth knowing about because it explains a common surprise. Converting ten records for a test can produce a narrower sheet than converting the whole export, simply because the sample did not happen to contain the rarer fields.

Nesting flattens, and deep nesting flattens badly

JSON describes a tree and a spreadsheet is a grid, so a nested object is flattened by joining the key names into the column heading. One level produces a sheet anybody can read; two is usually still fine.

Beyond that it degrades in a way that is obvious the moment you look at it: headings become long, the sheet becomes very wide, and most cells in most rows are empty because different records nest differently. If a conversion produces sixty columns from what looked like a simple export, that is the shape of the data rather than a fault — and a signal that the JSON should probably stay JSON.

Arrays are where a spreadsheet runs out

An order with five line items, a post with a list of tags, a person with several previous addresses — none of these has a correct single-row representation. The three available answers are one column per position, one column with the values joined, or one row per element, and each breaks something.

When arrays carry the meaning, do what a database would: produce one sheet for the parent records and one for the children, joined by an identifier. It is more work than a single conversion and it is the only version a spreadsheet user can actually reason about.

Reading an AI service export without writing any code

The archive that ChatGPT, Claude or an API dashboard hands over is JSON because that is what a machine reads, and most people receiving one have no tool that opens it usefully. A spreadsheet is the realistic answer: XLSX declares its types, so timestamps stay timestamps and long numeric IDs are not silently rewritten in scientific notation the way a CSV opened in Excel would rewrite them.

It works well for the flat parts — usage logs, billing lines, message lists with one entry per row. It works badly for the conversation archive itself, which is a tree of message nodes rather than a table, and flattening it produces columns named after paths nobody wants to read. Convert the part you actually need rather than the whole export.

Before you send it on

Look at the sheet, briefly. Two things are worth checking every time: that the identifier columns read as text rather than having been formatted into numbers, and that the date columns look like dates rather than like five-digit numbers.

And check what is actually in it. A JSON export from an API contains every field the API returns, including internal identifiers, flags and occasionally fields nobody realised were there. A spreadsheet makes all of it visible in a way a JSON file does not, which is a good thing to discover before the file leaves your organisation rather than after.

Nothing is uploaded, which matters for exports

The conversion runs in the browser tab on your own processor. The file is never sent anywhere, there is no account and no daily allowance, and the limit is 100 MB a file.

That is more relevant here than on most conversions. A JSON export is nearly always the raw output of a system — customer records, orders, form submissions, user accounts — and handing it to a third-party converter means handing over exactly the data an organisation is answerable for. Not sending it anywhere is the simplest form of not having to trust anybody with it.

How to convert a JSON export to XLSX

  1. Drop the JSON onto this page — an array of records is the usual shape.
  2. Nested objects are flattened into columns as it converts, in your browser.
  3. Download the workbook and check the identifier and date columns before sending it on.

JSON and XLSX: records become a workbook

JSON compared with XLSX
JSONXLSX
Full nameJavaScript Object NotationExcel Workbook
File extension.json.xlsx
Media typeapplication/jsonapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
First published20012007
Published byMicrosoft
SpecificationRFC 8259ECMA-376
LicensingOpen standardOpen standard
Standing todayCurrentCurrent
Opens in a browserEvery browserNo browser
Considered insteadXML, YAML, NDJSONCSV, ODS, Parquet

Opening the result

No browser reads XLSX. It is the less portable of the two, so it is worth being sure the program at the other end accepts it before sending one.

The usual programs do not overlap: JSON opens in Visual Studio Code, jq and Postman, XLSX in Microsoft Excel, LibreOffice Calc and Google Sheets — so whoever receives the result needs something from the second list.

What each format is for

The two are aimed at different work: JSON at moving data between programs and the web, XLSX at editing. That is worth weighing before converting, because the reason one exists is usually the reason the other is awkward.

JSON was published in 2001. The specification is RFC 8259, and it is worth reading if the file has to outlive the tool that wrote it.

XLSX comes from Microsoft and dates from 2007, specified as ECMA-376. Microsoft Excel, LibreOffice Calc and Google Sheets all read it.

JSON to XLSX: types, nesting and arrays

Are my JSON files uploaded anywhere?

No. This conversion runs entirely inside your browser, so the file never leaves your device. You can confirm it yourself: open the network tab of your browser's developer tools and convert something. You will see the page load, plus the analytics and advertising the site is paid for with — and nothing carrying your file. The engine behind this particular pair is SheetJS, a spreadsheet reader and writer in JavaScript; your browser fetches it once and caches it.

Why XLSX rather than CSV?

Because the types are declared in the file rather than guessed on opening. A CSV forces Excel to decide what every column is, which is where leading zeros disappear and product codes become dates. An XLSX arrives with the columns already correct.

What happens to nested objects?

They are flattened into columns, with the nesting expressed in the column heading. One or two levels produce a perfectly readable sheet; deeper structures produce a very wide one with a lot of empty cells, and at that point the data probably wants to stay JSON.

What happens to arrays inside a record?

There is no good answer in a spreadsheet. A record with several tags or line items has to become extra columns, a joined string, or extra rows — each wrong for some purpose. When arrays carry the meaning, produce two sheets the way a database would rather than one.

Do all records need the same fields?

No. The conversion looks across the records to build the full set of columns and leaves a cell empty where a record has no value, which is why converting a small sample can produce fewer columns than the whole file.

Will the recipient be able to sort and filter it?

Yes — it is a normal workbook. The header row becomes the header row, and every spreadsheet feature works on it. That is the practical reason to send this rather than a text file somebody has to import.

Is my data uploaded?

No. The conversion runs inside your own browser, so nothing is sent anywhere — which is worth knowing, because a JSON export is usually raw API output and tends to contain customer records nobody thought about when they asked for the file.

More about these formats