Data

Excel to JSON Converter

Convert Excel XLSX or XLS files to JSON array. Sheet picker, header-row option, optional type coercion.

Loading interactive tool…

Embed this tool on your site

About this tool

XLSX to JSON converts Excel workbooks (.xlsx, .xls) into a JSON array that any modern API or database can consume. Upload a workbook, pick which sheet to convert, choose whether the first row is a header (used as object keys) or whether to auto-name columns col1, col2, …, and decide on type handling. With Coerce numbers & booleans on (the default), the tool reads the text each cell displays and turns plain integers, decimals and lowercase true/false into JSON numbers and booleans, so "42" becomes 42; Excel TRUE/FALSE cells and formatted numbers like 1,234.50 stay strings. With it off, you get Excel's own cell values: numbers, booleans, text and dates as serial numbers. The tool uses SheetJS, loaded from cdnjs when you pick a file. The conversion runs in your browser via the File API — your spreadsheet never reaches a remote server. Output JSON is pretty-printed and can be copied or downloaded as a .json file.

Why use it

  • Browser-Only Privacy: Files are parsed in your tab via the File API and SheetJS — Excel data with customer records, salaries, or financial details never reaches a remote server.

  • Multi-Sheet Workbooks: Every sheet in the workbook is available in the picker, so you can convert each sheet on demand without splitting the file beforehand.

  • Header Row Option: Choose between using row 1 as object keys (the standard "first row is header" convention) or treating all rows as data with auto-generated column names.

  • Two Type Modes: Coercion turns displayed numbers and lowercase true/false into JSON types; switching it off returns Excel's native numbers, booleans and date serials instead.

  • Native Excel Format Support: SheetJS handles both .xlsx (OOXML) and legacy .xls (BIFF) binary formats — no need to convert files first in Excel.

  • Direct Download: Save the JSON output as a file with the original workbook name and sheet name embedded, ready to commit or send to teammates.

How to use

  1. Click the Upload XLSX or XLS file button and pick a workbook from your device.
  2. Once parsed, choose which sheet to convert from the dropdown — multi-sheet workbooks all become available.
  3. Pick header mode: First row is header to use row 1 as object keys, or No header to auto-name columns col1, col2, ….
  4. Leave Coerce numbers & booleans on to parse displayed text like 42 or true into JSON types, or turn it off to keep Excel's own cell types.
  5. Click Convert to produce the JSON array and review it in the output panel.
  6. Copy the JSON to clipboard or click Download .json to save it to disk.

When it helps

  • Migrating data from a customer-supplied Excel sheet into a Node.js, Python, or REST API pipeline that expects JSON.
  • Generating fixtures for application tests from a hand-edited Excel file maintained by non-developers.
  • Producing seed data for a database from a spreadsheet that finance or operations teams update weekly.
  • Converting a single sheet of a multi-sheet Excel report into JSON for visualisation in a dashboard.
  • Pre-processing Excel exports from legacy ERP systems before importing into a modern SaaS API.
  • Quickly inspecting the structure of an unfamiliar Excel file by viewing it as JSON in the browser.

Examples

Sheet with header row + coercion on

Input
Excel sheet:
| id | name  | score |
|----|-------|-------|
| 1  | Alice | 9.5   |
| 2  | Bob   | 7     |
Expected result · Scroll for more
[
  {
    "id": 1,
    "name": "Alice",
    "score": 9.5
  },
  {
    "id": 2,
    "name": "Bob",
    "score": 7
  }
]

Sheet with no header (auto-named columns)

Input
Excel sheet:
| Alice | 30 |
| Bob   | 28 |
Expected result
[
  {
    "col1": "Alice",
    "col2": 30
  },
  {
    "col1": "Bob",
    "col2": 28
  }
]

Coercion off keeps Excel's own types

Input
Excel sheet (zip typed as text, qty a number, active a TRUE cell):
| zip   | qty | active |
| 01234 | 5   | TRUE   |
Expected result
[
  {
    "zip": "01234",
    "qty": 5,
    "active": true
  }
]

Tips

  • Coerce numbers & booleans is on by default — turn it off when string-formatted values like ZIP codes or phone numbers must keep their leading zeros.
  • If your Excel file has a multi-row header (e.g. category + subcategory), pre-merge it to a single header row in Excel first; the tool only treats one row as header.
  • For very large workbooks (>50 MB), browser memory becomes the limit — split into smaller files or use a server-side parser like Python's openpyxl.
  • The download is named <workbook>-<sheet>.json using the sheet name as-is, so rename the file if the sheet name contains spaces or symbols.
  • With coercion on, dates appear as the date text Excel shows; with it off they appear as serial numbers — pick the mode that suits your downstream code.

Frequently Asked Questions

Is my Excel file uploaded to a server?
No. The file is read via the browser File API and parsed in-memory by SheetJS. The contents — including PII, financials, or proprietary data — never cross the network.
Does it support both .xlsx and .xls files?
Yes. Modern .xlsx (Office Open XML) and legacy .xls (BIFF binary) are both supported through SheetJS. The file picker only offers .xlsx and .xls; SheetJS can also read macro-enabled .xlsm files (macros are not executed), but you need to rename or pick them with an all-files filter.
What about multi-sheet workbooks?
All sheets are exposed in the picker dropdown after upload. Convert one sheet at a time; switch sheets without re-uploading the file.
Why are my dates appearing as numbers like 44927?
With Coerce numbers & booleans off, the tool returns raw cell values, and Excel stores dates as serial numbers (days since 1900-01-01). With it on, dates come out as the text shown by the cell's date format instead. To convert serials in code, use new Date((n - 25569) * 86400000).
How are formulas handled?
SheetJS reads the cached calculated value, not the formula string. So if cell A1 contains =SUM(B1:B10), the JSON shows the sum value, not the formula.
What is the maximum file size?
There is no hard limit, but browser memory becomes the bottleneck. Files up to 50-100 MB usually work; very large workbooks may freeze the tab during parsing.
Are merged cells handled?
SheetJS reads merged cells as if only the top-left has a value, with the other cells being empty. The JSON output reflects this — merge regions appear as a single value followed by null.
Can I convert all sheets at once?
Not in this tool — for performance and clarity, conversion is one sheet at a time. To convert all sheets, repeat the action for each sheet name in the picker; the JSON output is independent.
Why do Excel TRUE/FALSE cells or 1,234.50 come out as strings?
With Coerce numbers & booleans on (the default), the tool reads each cell's displayed text and only converts plain integers, plain decimals and lowercase true/false. Excel boolean cells display as TRUE/FALSE, and numbers with thousands separators, currency or percent formats keep their symbols, so they stay strings. Turn coercion off to get Excel's own numbers and booleans.

Explore the category

Glossary

XLSX
The modern Excel file format, based on Office Open XML (OOXML) packaged in a ZIP archive. Standard since Excel 2007 and the default for new workbooks.
XLS
The legacy Excel binary format (BIFF), used by Excel 97-2003. Still common in enterprise software exports — handled by this tool through SheetJS.
SheetJS
An industry-standard JavaScript library for reading and writing spreadsheet formats including XLSX, XLS, CSV, and ODS. Loaded from CDN only when a file is selected.
Header row
The first row of a sheet, conventionally containing column names. When enabled, those names become object keys in the JSON output.
Type coercion
Converting string values that look like numbers or booleans into their native JSON types. Optional — disable when values must keep their original string form (e.g. ZIP codes with leading zeros).
Sheet
One tab within an Excel workbook. Workbooks can contain many sheets; this tool converts one sheet at a time and shows them all in a picker dropdown.
A LITTLE HELP. A LOT DONE.
Good tools.
Great flow.

Your shortcut to the everyday. Create, convert, calculate,
and get back to what you love.

✓ Free to use✓ No sign-up✓ 500+ possibilities