Skip to main content
PulsarKit

Convert Excel to JSON

Turn a spreadsheet into JSON your code can actually consume: array of objects, array of arrays, or one array per column.

Drop your files here

.xlsx, .xlsm, .xls, .ods · up to 300 MB

JSON shape
More settings

How to Convert to JSON

  1. 1

    Drop your Excel file

    XLSX, XLSM, XLS and ODS are read directly in the browser, and the sheet list appears as soon as the workbook opens.

  2. 2

    Pick the sheet and the JSON shape

    Array of objects for an API payload, array of arrays for a script that knows its columns, by-column for charting libraries.

  3. 3

    Convert and download

    The result is valid JSON at the indent you choose, ready for JSON.parse without any cleanup step.

Three shapes, three different consumers

An array of objects, one object per row with keys from the header, is what a REST endpoint or a database seeder expects, and it is the default. An array of arrays is smaller and faster to iterate when the consuming code already knows the column order; it also survives duplicate or missing headers, because there are no keys to collide. The by-column shape inverts the table into one array per column, which is exactly the input most charting libraries want and which is tedious to build by hand from row data.

Duplicate and missing column names

Real spreadsheets have two columns called id, a header row three rows down under a title banner, and an unnamed column somebody added at the end. Each of those breaks a naive converter. Here the header row is a setting, not an assumption. Duplicate names are suffixed _2, _3 and reported so you know a rename happened rather than discovering it in production; note that the first occurrence keeps its original name, which is not what the underlying library does by default. Blank headers become column_2, column_5 and so on, numbered by position so they stay stable if you re-export.

Types that survive the trip

Numbers stay numbers, booleans stay booleans, and dates become ISO 8601 strings, date only when the time is midnight and a full timestamp otherwise, because a raw Excel serial number like 45730 is meaningless to everything downstream. Text that merely looks numeric, such as a product code with a leading zero, stays a string. Empty cells are the one case with no obviously right answer, so you choose: null, an empty string, or the key omitted from the object entirely.

Nothing is uploaded

The workbook is parsed and the JSON serialised inside this browser tab. No copy is sent to a server, nothing is stored, and the data is gone the moment you close the page, which matters when the sheet is a customer export.

Frequently asked questions

What is the difference between an array of objects and an array of arrays?

An array of objects gives you {"id": 1, "name": "A"} per row, using the header for keys, which is readable and self-describing. An array of arrays gives you [1, "A"] per row, including the header as the first entry, which is smaller and immune to duplicate column names.

My header is not the first row. Can I still use objects?

Yes. Set the header row number to wherever the real column names live, up to row 50. Everything above it is discarded, so a title banner and a blank spacer row cause no trouble.

What happens to dates and leading zeros?

Dates become ISO strings such as 2026-03-14 rather than Excel serial numbers. A value stored as text, like the product code 00123, stays a string with its zeros intact.

Are formulas exported?

Their computed values are. JSON has no way to express a formula, so the number the cell last evaluated to is what ends up in the output.

Can I export every sheet in one file?

Yes. Choose all sheets and keep the wrapper on, and you get one object whose keys are the sheet names. Turn the wrapper off and you get a ZIP with a separate JSON file per sheet.

What if two columns have the same name?

The first keeps the name and later ones get _2, _3 appended, and a notice tells you which key was renamed. Switching to the array-of-arrays shape avoids the question entirely.

Does my file go to a server?

No. Reading the workbook and building the JSON both happen locally in your browser, with no upload and no temporary storage anywhere.

Related tools