"category": "format-converter",

Excel to JSON Converter

"tldr": Drop an .xlsx, .xls, or .csv file and get a JSON array - first row becomes the keys, multi-sheet workbooks supported, file never uploaded.

Convert a spreadsheet into a JSON array of objects: drop in an .xlsx, .xls, .ods, or .csv file, and the first row becomes the object keys with each following row becoming one record. Multi-sheet workbooks get a sheet picker.

{"xlsx": "json"}

The file is parsed with SheetJS inside your browser - it is never uploaded, which is the difference that matters when the spreadsheet is a salary list, a customer export, or anything else you should not be feeding to a random converter site. Typed cells survive: numbers stay numbers, booleans stay booleans.

How to convert Excel to JSON

  1. 1Click "Choose file" or drag a spreadsheet onto the output area.
  2. 2If the workbook has several sheets, pick the one you want from the dropdown.
  3. 3The JSON array appears instantly - first row as keys, one object per data row.
  4. 4Copy it or download as a .json file.

Convert Excel (.xlsx) to JSON in code

JavaScript (SheetJS)
import * as XLSX from "xlsx";

const wb = XLSX.read(await file.arrayBuffer());
const rows = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
Python (pandas)
import pandas as pd

rows = pd.read_excel("data.xlsx").to_dict(orient="records")

Frequently asked questions

My dates came out as numbers like 45123 - why?

That is how Excel stores dates internally: days since January 1900. Cells *formatted* as dates usually convert to date strings, but raw serials leak through when formatting is absent. Convert them in code as new Date(Date.UTC(1899, 11, 30) + serial * 86400000), or format the column as text/ISO dates before converting.

How are empty cells handled?

Keys for empty cells are omitted from that row's object (rather than set to null) - the SheetJS default, which keeps the JSON compact. Downstream code should treat a missing key as empty; if you need explicit nulls, post-process with row.field ?? null.

Can I convert a specific range or skip header junk rows?

This tool reads each sheet from its first row. If your spreadsheet has title rows above the real headers, delete them first - or in code, pass options like range to sheet_to_json, which supports offsets and explicit header arrays.

Last updated:

You might also need

Free and in-browser, like everything on JSON Console. Browse all tools →