"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.
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
- 1Click "Choose file" or drag a spreadsheet onto the output area.
- 2If the workbook has several sheets, pick the one you want from the dropdown.
- 3The JSON array appears instantly - first row as keys, one object per data row.
- 4Copy it or download as a .json file.
Convert Excel (.xlsx) to JSON in code
import * as XLSX from "xlsx";
const wb = XLSX.read(await file.arrayBuffer());
const rows = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);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 →