Convert · Excel to JSON

Convert Excel to JSON

Drop an .xlsx file and get a JSON array of objects — the header row becomes the keys, numbers and booleans keep their types. Read entirely in your browser; the file is never uploaded.

No sign-up to start · Runs in your browser

Excel to JSON
Open the JSON in the editor
Excel file
JSON

Runs entirely in your browser — nothing is uploaded.

Drop an .xlsx file into the tool above to convert its first worksheet into a JSON array of objects — the header row becomes the keys.
Drop an .xlsx file and this converter turns its first worksheet into a JSON array of objects, entirely in your browser — the spreadsheet is never uploaded. Row 1 supplies the keys, every following row becomes one object, and numbers and booleans keep their real types instead of arriving as strings. Blank headers get positional names, duplicate headers are renamed, and empty cells become null. One honest caveat: Excel stores dates as serial numbers, and they come through that way.

Excel to JSON: a worked example

Worksheet in (D1 header left blank)
     A             B       C           D
1    name          salary  hired
2    Ada Lovelace  95000   2023-07-16  TRUE
3    Alan Turing   87500   2024-01-03  FALSE
JSON out
[
  {
    "name": "Ada Lovelace",
    "salary": 95000,
    "hired": 45123,
    "column_4": true
  },
  {
    "name": "Alan Turing",
    "salary": 87500,
    "hired": 45294,
    "column_4": false
  }
]

Row 1 supplies the keys, and the blank D1 header becomes column_4 so the TRUE/FALSE column is not dropped. Salaries stay numbers and the booleans stay booleans. The hired cells display as dates in Excel but are stored as serial numbers — 45123 is 2023-07-16 and 45294 is 2024-01-03 — and the converter reports the stored value. Add a =TEXT(C2,"yyyy-mm-dd") helper column in the sheet if you need date strings.

How to convert Excel to JSON

  1. 1

    Save the spreadsheet as .xlsx

    The converter reads the modern Office Open XML format. If your file is a legacy .xls, re-save it first — File → Save As → Excel Workbook in Excel, or File → Download → Microsoft Excel in Google Sheets.

  2. 2

    Drop the file into the converter

    Drag the workbook into the drop zone or click to choose it. The file is unzipped and parsed on your device; nothing is sent to a server.

  3. 3

    Check the keys

    Row 1 becomes the object keys. Blank header cells are named by position — column_1, column_2 — and a duplicate header gets a _2 suffix so both columns survive.

  4. 4

    Scan the types

    Numbers and booleans arrive typed. Date cells arrive as Excel serial numbers like 45123 — a =TEXT() helper column in the sheet, or a one-line conversion in code, turns them back into readable dates.

  5. 5

    Open the JSON in the editor

    Send the converted array into the full editor to format, validate, explore it as a tree or mind map, or reshape it with the AI copilot.

Why use this converter

Never uploaded

The .xlsx is unzipped and parsed 100% in your browser — your spreadsheet stays on your device, with no account needed.

Headers become keys

Row 1 supplies the object keys. Blank header cells fall back to column_1, column_2, and duplicates are renamed so no column is lost.

Types preserved

Numeric and boolean cells become JSON numbers and booleans, not quoted strings, so the data is ready for code immediately.

Reads real-world files

Shared strings, inline strings, and compressed entries are all handled — workbooks from Excel, Google Sheets, and LibreOffice convert cleanly.

Consistent shape

Empty and missing cells become null, and every object carries the full key set, so downstream code can rely on every key existing.

Straight to the editor

One click carries the JSON result into the full editor to format, validate, or visualize it.

Read in your browser: unzip, then parse

An .xlsx file is not an opaque binary — it is a ZIP archive of XML parts in the SpreadsheetML format. When you drop one here, the converter does in JavaScript what a spreadsheet application does natively: it walks the ZIP central directory, inflates the parts it needs — the worksheet and the sharedStrings table — with the built-in DecompressionStream API, and scans the worksheet XML cell by cell. Everything happens on your device — no server ever sees the file, and the Network tab in DevTools shows no upload while it runs.

Real workbooks store text in two ways, and both are handled. Excel normally pools every distinct string in a sharedStrings part, with each cell holding an index into that pool; other producers write inline strings directly inside the cell element. Stored and deflate-compressed ZIP entries are both supported, so files written by Excel, Google Sheets, LibreOffice, and most export libraries read correctly. Conversion targets the first worksheet — sheet1, or the first worksheet part found if the workbook names its parts differently.

The practical consequence is privacy: this is safe for spreadsheets you would not feed to a random upload form — salary data, customer exports, financial models. It is also why conversion is instant; there is no upload round trip, just local CPU.

The header contract: row 1 becomes your keys

The contract is the same one the CSV converter follows: the first row of the worksheet is the header, each header cell names a column, and those names become the keys of every object in the output. Every following row becomes one object, so a header plus fifty data rows produces an array of fifty objects. Column count comes from the widest row, so a stray value to the right of the header still gets a column instead of being dropped.

Headers are cleaned up deterministically. A blank header cell is named by its position — a blank fourth column becomes column_4 — and surrounding whitespace is trimmed. Duplicates cannot survive in JSON, because an object cannot hold the same key twice, so the second email column becomes email_2 and a third would become email_3. Both columns keep their data; nothing is silently merged.

Empty cells and short rows become null, and every object carries the complete key set, so downstream code can rely on a key existing even when the cell was blank. If you control the sheet, name columns the way you want the JSON keys to read — lowercase, snake_case, no spaces — since renaming a header once in the spreadsheet beats renaming a key on every object afterwards.

Type fidelity — and why dates look like 45123

Cells in an .xlsx carry a type marker, and the converter honors it: numeric cells become JSON numbers, boolean cells become true and false, and text becomes strings. Formula cells are read as their cached result — the file stores the last value the spreadsheet computed, so a SUM cell arrives as 4200, not as formula text.

Dates deserve an honest explanation. Excel has no date type in storage: a date is a number counting days since December 30, 1899 — an epoch inherited, leap-year quirk and all, from Lotus 1-2-3 — with the time of day as the fractional part. A cell that displays 2023-07-16 actually stores 45123, and this converter reports the stored value rather than guessing which locale-dependent display format to apply. Date columns arriving as serial numbers is by design, not an accident.

There are two clean workarounds. In the spreadsheet, add a helper column like =TEXT(A2,"yyyy-mm-dd") — or format the column as Text before entering the dates — so the file stores real strings. In code, convert a serial with new Date(Date.UTC(1899, 11, 30) + serial * 86400000), which turns 45123 back into July 16, 2023.

.xlsx only: what to do with a legacy .xls

.xls, the Excel 97–2003 format, is BIFF — a stream of binary records inside a compound document. It shares nothing with the ZIP-of-XML structure of .xlsx, and reading it would mean shipping a second, much heavier parser, so this tool does not attempt it. Dropping an .xls produces a clear error instead of garbage output.

The fix is a single re-save. In Excel: File → Save As, then pick Excel Workbook (*.xlsx). LibreOffice Calc offers the same filter in its Save As dialog. In Google Sheets: File → Download → Microsoft Excel (.xlsx). In Apple Numbers: File → Export To → Excel. The re-saved file drops straight in.

It also helps to know what does not carry over from any workbook: only the first worksheet is converted, and only values — styles, colors, column widths, and merges are ignored, so a merged range contributes its value at the top-left cell and null elsewhere. If your source is actually CSV, the CSV to JSON converter is the shorter path. Once the JSON is out, the editor takes over: format it, validate it, walk it as a tree or mind map, or hand it to the AI copilot to reshape.

Frequently asked questions

Is the Excel to JSON converter free and private?

Yes. The workbook is unzipped and parsed entirely in your browser — no account, and the file is never uploaded to a server.

Which file formats are supported?

.xlsx, the Office Open XML format that Excel, Google Sheets, and LibreOffice all export. Legacy binary .xls is not supported — re-save it as .xlsx first via File → Save As in Excel.

Why do my dates come out as numbers like 45123?

Excel stores dates as serial numbers counting days since December 30, 1899, and the converter reads the stored value — 45123 is 2023-07-16. Add a =TEXT(A2,"yyyy-mm-dd") helper column in the sheet, or convert the serial in code with new Date(Date.UTC(1899, 11, 30) + serial * 86400000).

Which worksheet is converted?

The first worksheet only. If the data you need lives on another tab, move it to the first position or copy it into a fresh workbook before converting.

What happens to blank or duplicate headers?

A blank header cell is named by its position — column_1, column_2, and so on — and a duplicate header gets a numeric suffix, so a second email column becomes email_2. No column is dropped or merged.

What do empty cells become?

null. The key is still present on every object, so the output keeps a consistent shape across rows even when the sheet has gaps.

Are formulas evaluated?

No. The .xlsx file stores the last result the spreadsheet computed for each formula cell, and that cached value is what appears in the JSON — a number or a string, never the formula text.

What can I do with the JSON afterwards?

Open it in the full editor to format and validate it, explore it as a tree or mind map, or use the AI copilot to rename keys, filter rows, or reshape the structure.

Related tools

Convert your spreadsheet now

Open the Editor