Excel (.xlsx) to JSON Converter
Convert an Excel sheet into a JSON array of objects: the header row becomes keys, numbers and booleans keep their types, and date cells become ISO strings — read straight from the .xlsx in your browser.
Excel (.xlsx) to JSON Converter
Runs in your browser — nothing you enter is uploaded or stored.
Scratchpad auto-saved
How it works — in four simple steps
No signup and nothing to install — it all runs in your browser.
Open your workbook
Drop an .xlsx file on the box or click to choose one; pick the sheet if the workbook has several.
Set the options
Adjust the options above the boxes — the output updates instantly as you change them.
Check the result
Read the status line: it reports rows, keys and any value that couldn't be represented in JSON.
Copy or download
Copy the JSON or download it as a .json file. Nothing was uploaded at any point.
Text codes like 00742 survive because the values are read from the workbook itself, not from a CSV export.
Features
Header row or not
Use the first row as field names, or treat every row as data with generated column1, column2… names.
Real types, not just strings
Numbers, booleans and empty values are detected — while codes with leading zeros such as 00742 or +44 phone numbers stay text.
Rebuild nested objects
Headers like address.city can be folded back into nested objects instead of flat dotted keys.
Pretty or minified
2 or 4 spaces, tabs, or a minified single line for the smallest possible file.
Private by design
Parsing and conversion run in your browser with JavaScript — your data is never uploaded, logged or stored.
About the Excel (.xlsx) to JSON Converter
Spreadsheets are where a lot of data starts life — product catalogues, translation strings, price lists, seed data — and JSON is where applications want it. This converter reads the .xlsx file directly (it's a ZIP of XML defined by ECMA-376), picks the sheet you choose, and turns each row under the header into an object.
Because the data comes from the workbook rather than from a CSV export, types survive: numeric cells become JSON numbers, TRUE/FALSE become booleans, text stays text — including codes like 00742 that a CSV round-trip would mangle — and date-formatted cells become ISO 8601 strings such as 2026-10-21. Empty cells become null. Tick Nest dotted headers to build nested objects from columns like price.amount and price.currency.
Header cells that are empty get generated names (column3), so every value has a key. If your sheet has no header row, untick First row is the header.
Examples
The Sample button builds a small team workbook in your browser; its first sheet converts to this JSON.
| # | id | name | city | score | active | joined | |
|---|---|---|---|---|---|---|---|
| 1 | 1 | Ada Lovelace | ada@example.com | London | 98.5 | true | 2024-03-14 |
| 2 | 2 | Alan Turing | alan@example.com | Manchester | 91 | false | 2023-11-02 |
| 3 | 3 | Grace Hopper | grace@example.com | New York | 95.25 | true | 2025-01-20 |
| 4 | 4 | Katherine Johnson | kj@example.com | Hampton, VA | 99 | true | 2022-07-09 |
[
{
"id": 1,
"name": "Ada Lovelace",
"email": "ada@example.com",
"city": "London",
"score": 98.5,
"active": true,
"joined": "2024-03-14"
},
{
"id": 2,
"name": "Alan Turing",
"email": "alan@example.com",
"city": "Manchester",
"score": 91,
"active": false,
"joined": "2023-11-02"
},
{
"id": 3,
"name": "Grace Hopper",
"email": "grace@example.com",
"city": "New York",
"score": 95.25,
"active": true,
"joined": "2025-01-20"
},
{
"id": 4,
"name": "Katherine Johnson",
"email": "kj@example.com",
"city": "Hampton, VA",
"score": 99,
"active": true,
"joined": "2022-07-09"
}
]This output was produced by the converter on this page with the default options — load it with the “Sample workbook” preset above and change any option to see the effect.
How Excel (.xlsx) maps to JSON
| In Excel (.xlsx) | Becomes in JSON |
|---|---|
| Header row | object keys |
| Each row below | one object |
| Number cell | JSON number |
Text 00742 | "00742" |
| Date cell | "2026-10-21" |
| TRUE / FALSE | true / false |
| Empty cell | null |
Header price.amount + Nest | "price": {"amount": …} |
Things that trip people up
- Title rows above the header. If your sheet starts with a title or blank rows, the first row is treated as the header. Delete the extra rows (or copy the table to a new sheet) first.
- Formatted numbers. You get the stored value — 0.15 for a cell showing 15% — which is usually what code wants.
- Several tables on one sheet. Everything on the sheet is one grid. Put separate tables on separate sheets and convert them one at a time.
- .xls files. Only .xlsx/.xlsm are supported; resave old .xls workbooks as .xlsx.
Excel (.xlsx) vs JSON at a glance
| Property | Excel (.xlsx) | JSON |
|---|---|---|
| Specification | ECMA-376 / ISO/IEC 29500 (Office Open XML) | RFC 8259 (2017) · ECMA-404 |
| File extension | .xlsx | .json |
| Media type | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | application/json |
| Data types | number, text, boolean, date (as a serial number), formula | string, number, boolean, null, object, array |
| Comments | Cell notes | No |
| Nesting | None (grid; several sheets) | Unlimited |
- Excel (.xlsx): A sheet holds at most 1,048,576 rows × 16,384 columns (A to XFD), a cell at most 32,767 characters, and numbers keep 15 significant digits.
- JSON: Numbers are parsed as IEEE-754 doubles in JavaScript, so integers above 9,007,199,254,740,991 (2⁵³ − 1) lose precision.