Excel to JSON Converter

Convert Excel (.xlsx) files to JSON instantly in your browser. Your file never leaves your device.

Output format:
🔒

100% private

Your files are processed locally and never uploaded to our servers.

This Excel to JSON converter turns one sheet or every sheet of an .xlsx workbook into JSON inside your browser, using the header row as keys. Numbers and booleans stay JSON types, and dates come out as ISO 8601 strings. The usual case: someone in operations keeps a 312-row store list in Excel, and the developer who needs it as stores.json for the website's locator map has to get it out without retyping anything.

How to convert Excel to JSON

  1. Choose the output format above the upload box. Array of objects is the default and uses the first row as keys. Raw (arrays) gives you every row as an array of values.
  2. Drop an .xlsx file onto the upload box, or click the box to browse for one. The converter reads it on your computer and uploads nothing.
  3. A workbook with one sheet converts straight away.
  4. A workbook with several sheets asks which one you want. Pick a sheet, or All sheets to get one JSON object keyed by sheet name, then click Convert.
  5. Check the preview of the first 5 rows, then click Download .json or copy the JSON to your clipboard. The download is named after the workbook with (xlsx.com) added, so stores.xlsx arrives as stores (xlsx.com).json.

In Array of objects mode, a sheet with the headers name, amount, joined, active and notes comes out like this:

[
  {
    "name": "Ann",
    "amount": 1234.5,
    "joined": "2026-03-04",
    "active": true,
    "notes": null
  }
]

Raw mode keeps the header row as the first array, ["name", "amount", "joined", "active", "notes"], followed by one array per data row.

What the converter does to your data

Each cell becomes the JSON type that matches what Excel stored, not what the cell displays.

In ExcelIn the JSON
$1,234.50 (currency format)1234.5
12.5%0.125
=0.1+0.20.3, not 0.30000000000000004
TRUEtrue
A date"2026-03-04"
A date with a time"2026-03-04T14:30:00"
A time on its own"14:30:00"
An empty cellnull
A formulaIts last calculated result
A hyperlinkIts display text, not the URL
Rich textThe plain text
An error such as #N/AThe string "#N/A"

The floating-point cleanup rounds numbers to Excel's own 15 significant digits, which strips the binary leftovers that turn 0.3 into 0.30000000000000004.

Watch the error row. A "#N/A" string sitting in a column of numbers will break code that expects a number. Wrap lookups in IFERROR before converting if the receiving system can't handle it.

Blank rows are skipped. Every object carries every key, with null where a row has no value, so row 1 and row 312 have the same shape. In Raw mode every array is padded to the same length for the same reason.

Why Excel dates turn into numbers in JSON

Excel has no date type on disk. A date is a day count formatted to look like a date: 4 March 2026 is stored as 46085. A converter that reads the stored value and ignores the format hands you 46085, and whoever reads the JSON has to know to add it to 30 December 1899. Python's pandas has its own version of the problem: to_json still defaults to epoch milliseconds, 1772582400000 for the same day, unless you pass date_format="iso".

This converter detects date cells and writes ISO 8601 strings instead. A date becomes 2026-03-04, a date with a time becomes 2026-03-04T14:30:00, and a time on its own becomes 14:30:00. The date and date-time forms parse directly with Date.parse() in JavaScript or datetime.fromisoformat() in Python.

The same stored-value rule explains the currency and percentage rows in the table above. $1,234.50 is the number 1234.5 wearing a format, so that's what the JSON gets. If an API needs the formatted string, build it in a helper column with TEXT, for example =TEXT(B2,"$#,##0.00"), and convert that column instead.

Blank, duplicate and merged headers

Header rows in real workbooks are messy, and a naive conversion loses data without saying so. A hand-written loop that sets row[header] = value over a plain range is the classic case: two columns headed "amount" share one key, so the second overwrites the first on every row, and a blank header produces an empty-string key.

This converter handles each case so no column disappears:

  • A blank header cell becomes a key named after its column, like "Column B".
  • Duplicate headers get a numbered suffix: "amount", then "amount_2". The match ignores case, so Amount and amount count as duplicates.
  • Data to the right of the last header still exports, keyed "Column F" and so on.
  • A merged cell keeps its value in the top-left cell only. The other cells in the merge come out as null, and a header merged across two columns leaves the second one blank, so it gets a Column key.

Keys are the header text as written, trimmed of surrounding spaces. "Order ID" stays "Order ID", with the space, so JavaScript has to read it as row["Order ID"]. If your code expects orderId, rename the headers in Excel before converting.

Doing it in Excel without a converter

Excel has no built-in JSON export: File > Save As has no JSON option.

The closest route is Power Query. Select your data, go to Data > From Table/Range, then open Home > Advanced Editor and replace the query with:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],   // Table1 is your table's name
    Json = Text.FromBinary(Json.FromValue(Source))                // table to array-of-objects text
in
    Json

Close & Load puts the JSON text in a worksheet cell, which you copy into a text editor and save as .json. Microsoft documents that Json.FromValue writes tables as arrays of objects and dates as ISO 8601 text. The catch is size: a cell holds at most 32,767 characters, so only a small table fits.

Office Scripts is the other route: Automate > New Script > Create in Code Editor. Microsoft's own "Output Excel data as JSON" sample reads the first table on a sheet with getTexts(), so every value comes back as display text. A capacity of 10 arrives as "10", a string. The result goes to the script console or a Power Automate flow, not to a file, and the Automate tab isn't available on every Microsoft 365 plan.

Use one of these when the JSON has to refresh on a schedule, or when you need nested objects or renamed keys built in. For a one-off export, the converter above is faster.

Limits

  • .xlsx only. The converter doesn't accept .xls, .xlsm, .xlsb, .ods or .csv files. Open the file in Excel and save it as .xlsx first.
  • 50 MB per file.
  • The header row must come first in Array of objects mode. A report title in row 1 becomes the keys. Delete the title rows before converting.
  • Number formats aren't applied. A ZIP code stored as the number 2134 with a 00000 format exports as 2134, not "02134". Store codes as text in Excel if the leading zeros matter.
  • Flat output. One object per row. A header like address.city stays a single key with a dot in it; the converter won't build a nested address object.
  • Keys aren't renamed. No camelCase or snake_case conversion.
  • Hidden sheets are included. They appear in the sheet list and in All sheets output like any other sheet, so a hidden lookup tab ends up in your JSON unless you delete it first.
  • Values only. Formula text isn't exported, only results. Charts, images, comments and formatting are left out.
  • No password-protected workbooks. A file that asks for a password to open is encrypted, and the converter can't read it. If you know the password, open the file in Excel, clear it under File > Info > Protect Workbook > Encrypt with Password, and save.
  • No minify option. The JSON is always pretty-printed with 2-space indentation.

Going the other way, JSON to Excel turns an API response back into a workbook. If the receiving system wants CSV rather than JSON, use Excel to CSV.

Questions

Can Excel export to JSON?

Not from Save As: Excel 365 has no JSON file type in its save list. You can build JSON with Power Query's Json.FromValue function or with an Office Script, but neither writes a .json file for you. This converter does, from an .xlsx file, in the browser.

Why are my Excel dates numbers in the JSON?

Excel stores a date as a day count, so 4 March 2026 is the number 46085 underneath its date format, and many converters export that number. This converter recognizes date cells and writes them as ISO 8601 strings like 2026-03-04. Date-times come out as 2026-03-04T14:30:00 and times on their own as 14:30:00.

How do I convert multiple Excel sheets to JSON at once?

Pick All sheets from the sheet list after you drop the workbook, then click Convert. You get one JSON object whose keys are the sheet names and whose values are each sheet's rows. Hidden sheets are included, so delete any you don't want in the output first.

How do I keep leading zeros when converting Excel to JSON?

Store the codes as text in Excel before converting. A ZIP code typed as 02134 into a cell with a 00000 number format is really the number 2134, and that stored number is what gets exported. Text cells export exactly as typed.

Is my Excel file uploaded when I convert it?

No. The conversion runs in your browser with JavaScript, and the workbook never leaves your computer.

Is this Excel to JSON converter free?

Yes. There is no daily limit and no sign-up, and files can be up to 50 MB.

Can I get minified JSON instead of pretty-printed?

No, the output is always pretty-printed with 2-space indentation. To minify it, parse the file and stringify it again without an indent argument in your own code, or run it through any JSON minifier. The data is identical either way.