Excel to JSON Converter

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.

Advertisement

Free Online Excel to JSON Converter

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.

How to Use It

  1. Drag your workbook onto the drop zone or click to browse. Only .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.
  2. If the workbook has more than one sheet, a sheet selector appears. The first sheet is chosen by default.
  3. Pick an output format (the four shapes are described below).
  4. Adjust the conversion options: whether the first row is a header, how empty cells are represented, how dates are written, and the indentation.
  5. The JSON regenerates immediately on every option change. Review it in the preview pane — long output is truncated in the preview for speed, but Copy and Download always give you the complete document.

The Four Output Shapes

Array of Objects

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.

Column Arrays

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.

Key-Value Pairs

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.

Nested Sheets

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.

The Conversion Options That Actually Change Your Output

First Row Contains Headers

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.

Empty Cell Handling

Excel’s blank cell has no direct JSON equivalent, so you get three choices, and they are genuinely different:

  • Set to null — every object has every key, with 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.
  • Set to empty string — blanks become "". Convenient for string concatenation and templating, where null would print the word “null”.
  • Skip — the key is omitted entirely from that object. Produces the smallest output and suits sparse data, but means downstream code must handle absent keys rather than assuming a uniform shape.

Date Format

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.

Indentation

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.

A Worked Example

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.

Limits Worth Knowing

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.

Frequently Asked Questions

Is my spreadsheet uploaded to a server?

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.

Which Excel file types are supported?

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.

Can I convert every sheet at once?

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.

Why are my dates showing as numbers like 45123?

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.

What happens to formulas?

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.

My first data row vanished. Why?

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.

Which format should I use for a database import?

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.

Does it handle duplicate column headers?

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.

How large a file can I convert?

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.

Can I convert JSON back to Excel with this tool?

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.

What Is Excel to JSON Conversion

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.

Output Format Options

FormatStructureBest 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

Data Type Handling

Excel TypeJSON MappingConsiderations
TextStringDirect mapping
NumberNumberPreserve precision for financial data
DateISO 8601 stringExcel stores dates as serial numbers; convert to ISO format
Booleantrue/falseExcel TRUE/FALSE → JSON true/false
Empty cellnull or omittedDecide whether to include null values or skip empty cells
FormulaComputed valueConvert the formula result, not the formula itself

Common Use Cases

  • API data migration: Convert Excel-managed data into JSON for import into REST APIs, GraphQL endpoints, or NoSQL databases like MongoDB and CouchDB
  • Configuration generation: Transform Excel-based configuration tables into JSON config files for applications and services
  • Web application data: Convert spreadsheet data for use in client-side web applications, dashboards, and data visualizations
  • ETL pipelines: Use as the first step in Extract-Transform-Load pipelines that start with Excel exports from business systems
  • Test data preparation: Convert Excel test case definitions into JSON fixtures for automated testing frameworks

Best Practices

  1. Clean data before converting — Remove empty rows, merged cells, and formatting-only content. Merged cells produce unpredictable results in JSON conversion.
  2. Use the first row as headers — Ensure column headers are valid JSON key names: no spaces (use camelCase or snake_case), no special characters, and unique names.
  3. Validate JSON output — After conversion, validate the JSON with a schema validator to ensure data types and structure match your target system's expectations.
  4. Handle dates explicitly — Excel date serial numbers (like 45292) are meaningless in JSON. Convert to ISO 8601 strings (2024-01-15) or Unix timestamps based on your application's needs.
  5. Consider file size — JSON is typically 2-3x larger than the equivalent Excel file because it includes repeated key names. For large datasets, consider streaming or pagination.

Frequently Asked Questions

Is my Excel data secure when using this converter?+

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.

What output formats are available for JSON conversion?+

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).

How does the tool handle empty cells in my spreadsheet?+

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.

What Excel file formats are supported?+

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.

Can I convert multi-sheet Excel workbooks?+

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.

How are dates formatted in the JSON output?+

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.

What if my spreadsheet does not have header rows?+

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.

This tool is provided for informational and educational purposes only. All processing happens in your browser — no data is sent to or stored on our servers. While we strive for accuracy, we make no warranties about the completeness or reliability of results.