How a worksheet becomes JSON
The first row with content gives the keys, and every row after it becomes one object in a list: a sheet with the columns id, name and active gives [{"id": 1, "name": "Ana", "active": true}, ...]. Rows with no content are skipped. A row with fewer cells than the header gets null for the missing ones, and the keys keep the order of the columns.
Headers are made safe for you. A name used twice becomes name and name_2, an empty header becomes column7 (its column number), and a note under the result lists each repair. With the header option off, the keys are column1, column2 and so on, or you can choose to write each row as a list.
If a title or a note sits above the table, that line is taken as the header. Delete the lines above the table in Excel first, or turn the header off and remove them from the result.
Excel cell types and JSON types
A CSV has no types, so a converter has to guess them. An Excel cell is already typed, so nothing is guessed here, and the Cell values option does not appear for Excel input.
- A number cell is a JSON number. A text cell stays a string, even when it looks like a number:
00123typed into a text cell stays "00123". - A number shown with leading zeros through a custom format is stored as 123, so 123 is what you get.
- TRUE and FALSE become true and false. Empty cells become null, or no key at all if you turn on Leave out empty cells under More options.
- Errors such as #N/A come out as null.
- Number formats are not kept: a price shown as $12.00 is 12, and 25.5% is 0.255. Decimals are rounded to 15 significant digits, the precision Excel keeps.
- Dates and times become text. A date is
2024-03-04, a date with a time is2024-03-04T10:30:00.000Z(Excel keeps no time zone, so the Z is notation and not a conversion), and a time alone is09:30:00. A cell counts as a date or time from its number format, also when the format is written without separators, such as yyyymmdd or hhmmss, and dates before 1 March 1900 follow Excel's own day count. - Text keeps the characters it holds. The codes Excel writes inside text for characters XML cannot hold (such as _x000D_ for a carriage return) are turned back into those characters.
- A damaged workbook is refused with a message, because every part of an .xlsx file carries a checksum and a part that no longer matches means the cells could be wrong.
Excel and JSON both store numbers as 64 bit floating point values, so whole numbers above 15 digits are not exact in either. Keep long IDs as text cells in Excel.
Nested JSON from a flat sheet
Name the columns by path and the converter builds the structure. The headers name, address.city, address.zip, tags.0 and tags.1 give {"name": ..., "address": {"city": ..., "zip": ...}, "tags": [..., ...]} for each row. With Rebuild nested values from column names off, the headers stay as flat keys. If a dot is part of your real column names, choose another separator under More options.
Choosing A list under Write each row as gives one JSON list per row, with the column names as the first list. That shape is smaller, and it is handy when the keys would repeat thousands of times.
Several sheets and large workbooks
JSON from a workbook is made one sheet at a time. When the file has more than one sheet, All sheets at once saves one JSON file per sheet in a ZIP, named after the workbook and the sheet, for example sales-Orders.json. Empty sheets are left out and listed. Hidden sheets, rows and columns are read like any others.
In our tests on a laptop, a 50,000 row by 10 column sheet became about 11 MB of JSON in roughly 0.4 seconds, and 200,000 rows (45 MB of JSON) took about 3 seconds. The page keeps working, but a very long result is shown only in part, so use Copy or Download to get all of it.