Blank rows become empty objects
Spacer rows in a spreadsheet are still rows. Trim the sheet down to the table before converting for a clean result.
Spreadsheets are a comfortable place to author data and an awkward place to consume it. This converter turns a worksheet into a JSON array of objects, using the header row as the keys and preserving the cell types Excel already tracked.
Reading Excel
Auto-detect reads the first rows and picks the separator that splits them consistently.
Turn off when the file starts straight into data. Columns are then named column_1, column_2, and so on.
Turns "42" into a number and "true" into a boolean. Values with leading zeros stay text so IDs and zip codes survive.
Which worksheet to convert. Filled in once the workbook is read.
Dotted path to the array of records, such as data.items. Leave empty to use the whole document.
Turns {"user":{"id":7}} into a user.id column. Arrays are kept as JSON text.
Pick the encoding the file was written in. Wrong encoding shows up as garbled accents.
Comma-separated words that should become null instead of text.
Writing JSON
Snappy is the default across Spark, DuckDB and pandas. Gzip is smaller but slower to read.
Turns a user.id column back into {"user":{"id":7}}.
Excel needs a byte order mark to open UTF-8 files with accents correctly.
Rows per row group. Larger groups compress better; smaller groups let readers skip more.
conversion-preroll
This short ad is what keeps the converter free.
Spreadsheet workbooks with sheets, formatting and cell types. Nested, self-describing records that every language can read.
| Excel | JSON | |
|---|---|---|
| Type information | Per cell — text, number, date, boolean | Strings, numbers, booleans, null |
| Structure | Sheets of rows and columns | Nested objects and arrays |
| Compression | Zipped XML | None |
| Typical file size | Smaller than CSV, larger than Parquet | Largest — keys repeat on every record |
| Schema | None beyond the header row | Implicit, per record |
| Human-readable | Only in a spreadsheet app | Yes, though verbose |
| Tool support | Excel, Google Sheets, LibreOffice | Every language, natively |
Spacer rows in a spreadsheet are still rows. Trim the sheet down to the table before converting for a clean result.
A header of "Total (USD)" becomes the key "Total (USD)", spaces and brackets included. Rename headers first if you need clean identifiers.
The output is one JSON array from one worksheet, not an object keyed by sheet name.
Non-technical teams maintain the sheet; the build step consumes the JSON.
JSON loads directly into most seeding scripts.
An array of objects is what almost every endpoint expects.
sticky-bottomYour file is downloading
post-conversion