Convert XLSX, XLS and XLSM workbooks to JSON in your browser. Pick the output shape, header, empty-cell and date handling, then copy or download.
This converter turns an Excel workbook into JSON without installing anything or signing up. Drop an .xlsx, .xls or .xlsm file onto the page, pick the sheet you want, choose the JSON shape that suits your code, and copy or download the result. Parsing runs entirely in your browser using the SheetJS library, so the spreadsheet never leaves your machine — which matters when the file holds customer records, payroll data, or anything else you would not paste into a random web form.
It is aimed at developers seeding a database from a spreadsheet, analysts moving a finance export into a script, QA engineers turning a test-case sheet into fixtures, and anyone who has been handed an .xlsx by a colleague and needs it as structured data by lunchtime.
.xlsx, .xls and .xlsm are accepted; anything else is rejected with a clear message. If you just want to see how it behaves, use the built-in sample data option, which generates a small workbook for you.The default and the one most APIs and ORMs expect. Each row becomes an object keyed by column header:
[
{ "Name": "John", "Age": 28 },
{ "Name": "Jane", "Age": 32 }
]
Use this for INSERT seeding, REST request bodies, or anything you will iterate with map/forEach.
Transposes the sheet so each column becomes one array:
{
"Name": ["John", "Jane"],
"Age": [28, 32]
}
This is the natural shape for charting libraries, for pandas via DataFrame.from_dict, and for any column-wise numerical work. It is also markedly more compact than array-of-objects on wide sheets, because each key is written once rather than once per row.
Each row becomes an array of explicit { "key": ..., "value": ... } entries:
[
[
{ "key": "Name", "value": "John" },
{ "key": "Age", "value": 28 }
]
]
Verbose, but it survives duplicate column names and preserves column order, which plain JSON objects do not guarantee. Useful for generic form builders and audit-style output where the field name is data rather than schema.
The only format that exports the whole workbook at once, keyed by sheet name:
{
"Sheet1": [...],
"Sheet2": [...]
}
Pick this when the workbook is a set of related tables — customers, orders, products on separate tabs — and you want one file that keeps them together.
Leave this on when row 1 holds column names; those strings become your JSON keys. Turn it off when the sheet is pure data, and the tool generates Column1, Column2, Column3… instead, keeping row 1 as data rather than silently eating it. Getting this wrong is the single most common cause of a “my first record went missing” bug.
Excel’s blank cell has no direct JSON equivalent, so you get three choices, and they are genuinely different:
null where the cell was blank. Best for SQL loading and for strict schema validation, where a missing key and a null value are not the same thing."". Convenient for string concatenation and templating, where null would print the word “null”.Excel stores dates as serial numbers counted from an epoch of 1899-12-30, which is why an unconverted date arrives as something like 45123. The tool reads real date cells and writes them as either ISO 8601 (2023-01-15T00:00:00.000Z) or a Unix timestamp in seconds. ISO 8601 is the right default: it is unambiguous, sorts lexicographically, and is parsed natively by JavaScript, PostgreSQL, and virtually every JSON schema validator. Choose Unix seconds when feeding a system that expects epoch integers — but note the unit, since JavaScript’s Date constructor wants milliseconds and will read raw seconds as a date in January 1970.
Two spaces, four spaces, or minified. Use an indented form while you are eyeballing the data or committing it to a repository where a readable diff matters; minify when the JSON is going over the wire or into a bundle, where whitespace is typically 15–25% of the payload.
Say a sheet has headers Name, Signup, Plan, and a row reading Ada, 2024-03-01, and a blank Plan cell. With headers on, empty cells set to null, and ISO 8601 dates, the output is:
[
{
"Name": "Ada",
"Signup": "2024-03-01T00:00:00.000Z",
"Plan": null
}
]
Switch empty-cell handling to skip and the Plan key disappears from that object entirely, while rows that do have a plan keep it — so the objects in your array no longer share a shape. That is fine for a document store and a problem for a strict schema, which is exactly why the setting exists.
The converter exports cell values, not spreadsheet behaviour. Formulas come across as their computed result, not the formula text. Cell formatting, colours, conditional formatting, merged-cell layout, charts, images, pivot tables and macros are not represented in JSON and are dropped. Merged cells contribute a value to the top-left position only, so a merged header block yields one populated key and some blanks — flatten merged headers in Excel before converting. Everything is processed in browser memory, so very large workbooks are bound by your device’s RAM rather than by a server limit. If your source is a plain text export rather than a workbook, the CSV to JSON converter is the more direct route. Once you have JSON, the JSON formatter will re-indent or minify it and the JSON validator will check it against a schema.
No. The file is read with the browser’s File API and parsed locally by SheetJS running in the page. Nothing is transmitted or stored, which makes it safe for spreadsheets containing personal or commercial data.
Modern .xlsx, the legacy binary .xls, and macro-enabled .xlsm. Macros are not executed — only the cell data is read — and other extensions are rejected before parsing begins.
Yes, choose the Nested Sheets output format. It emits one JSON object keyed by sheet name, with each sheet’s rows as the value. The other three formats convert the single sheet currently selected.
That is Excel’s internal serial value, counted in days from 1899-12-30. It happens when the cell was never formatted as a date, so the file records it as a plain number. Format the column as a date in Excel and re-export, and the converter will emit a proper ISO 8601 string.
Their calculated values are exported, not the formula text. A cell containing =SUM(A1:A10) appears in the JSON as the number it evaluated to when the workbook was last saved by Excel.
The header toggle is on and your sheet has no header row, so row 1 was consumed as column names. Switch off “First row contains headers” and the tool will generate Column1, Column2… keys and keep every row as data.
Array of objects, with empty cells set to null. That combination gives every record the same set of keys and maps blanks to SQL NULL, which is what bulk-loading tools and ORMs expect.
In array-of-objects and column-arrays output, later duplicates overwrite earlier ones because JSON object keys must be unique. If your sheet genuinely has repeated headers, use the key-value format, which keeps each pair separately and preserves column order.
There is no server-side cap; the practical ceiling is your browser’s memory, since the whole workbook and the generated JSON are held in RAM at once. Tens of thousands of rows are routine on a normal laptop. If a very large workbook stalls, split it by sheet or by row range and convert in parts.
No, the conversion is one-way. For the reverse direction, or for other structured-data conversions, see the CSV to JSON converter and the YAML to JSON converter.
Converting Excel spreadsheets (XLS/XLSX) to JSON transforms tabular data into the structured format used by web APIs, databases, and modern applications. Excel remains the most common format for business data — financial reports, inventory lists, customer databases, and project plans — but developers need this data in JSON for integration with web services, NoSQL databases, and configuration systems.
This tool converts Excel files to JSON directly in your browser with no server uploads, supporting multiple sheets, data type preservation, and customizable output structures.
| Format | Structure | Best For |
|---|---|---|
| Array of objects | [{col1: val, col2: val}, ...] | API payloads, MongoDB imports |
| Array of arrays | [[val, val], [val, val], ...] | Raw data processing, matrix operations |
| Nested objects | {key: {col1: val, col2: val}} | Lookup tables, configuration data |
| Keyed by column | {col1: [vals], col2: [vals]} | Column-oriented analytics |
| Excel Type | JSON Mapping | Considerations |
|---|---|---|
| Text | String | Direct mapping |
| Number | Number | Preserve precision for financial data |
| Date | ISO 8601 string | Excel stores dates as serial numbers; convert to ISO format |
| Boolean | true/false | Excel TRUE/FALSE → JSON true/false |
| Empty cell | null or omitted | Decide whether to include null values or skip empty cells |
| Formula | Computed value | Convert the formula result, not the formula itself |
Yes, your data is completely secure. All Excel parsing and JSON conversion happens entirely in your browser using JavaScript. Your file data never leaves your device or gets uploaded to any server, ensuring complete privacy for sensitive spreadsheet information.
The converter offers four output formats: Array of Objects (each row becomes an object, ideal for APIs and databases), Column Arrays (columns as separate arrays, great for charting libraries), Key-Value Pairs (explicit key-value structure for configuration files), and Nested Sheets (all sheets in one object, useful for multi-sheet workbooks).
You can configure how empty cells are handled using three options: Set to null (empty cells become JSON null values), Set to empty string (empty cells become blank strings), or Skip (empty cells are omitted from the output entirely). Choose the option that best matches your target system requirements.
The converter supports all common Excel formats including .xlsx (Excel 2007 and later), .xls (Excel 97-2003), and .xlsm (macro-enabled workbooks). Simply drag and drop your file or click to browse, and the tool will automatically detect and parse the format.
Yes, the converter fully supports multi-sheet workbooks. You can select which sheet to convert from a dropdown menu. If you need all sheets in one JSON file, use the Nested Sheets output format, which creates an object with sheet names as keys and their data as values.
Dates can be formatted in two ways: ISO 8601 format (e.g., 2023-01-15T00:00:00.000Z) which is widely compatible with most programming languages and APIs, or Unix timestamp (seconds since January 1, 1970) which is useful for systems that work with epoch time.
You can toggle off the First row contains headers option. When disabled, the converter will generate automatic column names (Column1, Column2, etc.) instead of using the first row as property names. This is useful for spreadsheets that start directly with data.