How to convert Excel to JSON
- Open an .xlsx, .xls or .ods file.
- Pick one sheet or all sheets, and check that the first row holds your column names.
- Copy the JSON or download it as a .json file.
A spreadsheet is often the easiest way to edit data
Product catalogs, translation strings, price lists, FAQ entries, quiz questions, store locations: a lot of app data starts life in a spreadsheet because that's where non-developers are comfortable editing it. At some point it has to reach the code, and that's usually as JSON. This converter does the step directly from the workbook, without a detour through CSV where types and special characters can get lost.
What the output looks like
Each row below the header becomes an object. The header cells supply the keys, and cell values keep their type:
| Cell | JSON |
|---|---|
| Number 19.99 | 19.99 |
| TRUE | true |
| Text | "text" |
| Date 7/4/2026 | "2026-07-04" |
| Empty cell | "" |
JSON has no date type, so dates are written as ISO 8601 strings, which JavaScript's new Date() and practically every other language parse directly. Times get a T separator (2026-07-04T18:30:00), and cells holding only a time become "18:30:00". The conversion reads the date serial numbers stored in the file itself, so the result doesn't shift with your computer's time zone. Workbooks using the old Mac 1904 date system are handled too.
If two header cells have the same text, the second key gets a suffix (price_2) so neither column overwrites the other. Blank header cells get a generic column_N key.
One sheet or the whole workbook
With a single sheet selected you get a plain array, ready for fetch responses, static site generators or seed scripts. Choose All sheets and the output becomes one object keyed by sheet name, each holding its array of rows:
{"Products": [ … ], "Categories": [ … ]}
That shape also works in reverse: feed it to JSON to Excel and every key becomes a sheet again.
Tidy the sheet for cleaner keys
The header row becomes your property names, so a few minutes in the spreadsheet saves cleanup in code. Short, consistent headers such as productId or unit_price are easier to use than "Unit price (USD, incl. tax)". Keep one header row only, remove title rows or notes above the table, and avoid blank columns in the middle of the data. Everything below the header is read as data, row by row, until the last filled cell.
Options worth knowing
- First row has column names: untick it to get arrays of arrays instead of objects, useful when the sheet has no headers.
- Use values as shown: gives the formatted text ("$19.99", "45%") instead of the raw number (19.99, 0.45).
- Pretty print: two-space indentation for readable, diff-friendly files; switch it off for compact output.
Formula cells contribute their last saved result. Merged cells keep their value in the top-left position only. Password-protected workbooks can't be read until the password is removed. The workbook is processed inside your browser, so internal price lists or customer data are never uploaded. Have the data as CSV instead? Use CSV to JSON.
More ways to use this tool
Frequently asked questions
Is my spreadsheet uploaded?
No. The file is read and converted in your browser. Nothing is sent to a server.
How are dates converted?
To ISO 8601 strings such as 2026-07-04, with time added when the cell has one. They are calculated from the values stored in the file, so your time zone doesn't change them.
Can I convert all sheets at once?
Yes. Choose All sheets and you'll get one JSON object whose keys are the sheet names.
What if my sheet has no header row?
Untick First row has column names. Each row is then output as an array of values.
Do formulas work?
The JSON contains the result of each formula as it was last calculated and saved in the file.