JSON is how APIs, apps and exports hand over data, XML is how many older systems still export it (product feeds, accounting and bank exports, open data, RSS), and Excel or CSV is where people want to sort, filter and chart it. This page turns one into the other: JSON to Excel or CSV, XML to Excel or CSV, and Excel back to JSON. It finds the records, flattens the nesting into columns and shows you the table (or the JSON) before you save it. It is free to use, with no account and no upload limit, and it runs entirely in your browser: nothing is uploaded, and while the page stays open, a feature you have already used keeps working offline.
The flattening follows the usual rules: an object inside a record becomes dotted columns such as address.city; a list of plain values such as tags is joined into one cell; a list of objects (the order lines of an order, say) becomes extra rows with the order's other columns repeated, or, if you prefer, a sheet of its own linked back to the main sheet by row number. Columns keep the order they first appear in. Workbooks are read and written with SheetJS, and XML by the site's own strict reader.
- How is nested JSON turned into columns?
- Each level of nesting adds to the column name with a dot:
{"user": {"name": "Ada", "address": {"city": "London"}}} gives the columns user.name and user.address.city. Data nested more than 64 levels deep is kept as JSON text in one cell, and the page says so. - What happens to arrays in the JSON?
- A list of plain values (["red", "blue"]) is joined into one cell, with a comma unless you choose another separator. A list of objects becomes one row per object with the record's other columns repeated, or with "Extra sheets" a sheet of its own whose _parent_row column points back at the row it belongs to. Where two long lists sit side by side, the later one is kept as JSON text rather than writing every combination, and the page says so.
- Will Excel mangle long IDs, phone numbers or zip codes?
- Not in the .xlsx: JSON text is written as text, so "000123", "+44 20 7946 0000" and a 20-digit order number arrive exactly. Only real JSON numbers become numbers. One catch is in the JSON itself: a bare number with 16 or more digits cannot be kept exactly by JavaScript or Excel, so put such IDs in quotes; the page warns when it sees one.
- Which CSV separator should I choose?
- Comma suits most software and English-language Excel. In much of Europe, Excel expects semicolons because the comma is the decimal mark, so choose semicolon if a comma CSV opens with everything in column A. Tab is handy for pasting into a spreadsheet, and bar for data that is full of commas and semicolons.
- Why do accents look wrong when Excel opens a CSV?
- Without a marker Excel guesses an old Windows encoding and turns é into é. Leave "CSV marked as UTF-8 for Excel" ticked and the file starts with the byte-order mark that tells Excel it is UTF-8. Untick it for tools that do not expect one, such as some database importers.
- What does "Stop text running as formulas" do?
- A cell that starts with =, +, - or @ is treated as a formula when a spreadsheet opens a CSV, which can be abused to run commands or leak data (CSV injection). With this ticked, such text gets an apostrophe in front so it shows as text; plain numbers such as -12.5 are left alone. Untick it only if the CSV feeds a program that wants the raw text.
- Can it convert JSON Lines to CSV?
- Yes. A .jsonl or .ndjson file, one JSON object a line as logs and data exports often are, becomes one row a line. Text with one JSON value per line is recognised even without that extension.
- How does it decide what a row is in XML?
- It looks for the element whose same-named children repeat most often (for example 500 <book> elements inside <catalog>) and makes each of those a row; the summary names it, such as "catalog > book". Attributes become columns with an @ in front (@id), child elements dotted columns (price.currency), namespace prefixes are dropped, and text mixed among child elements goes in a #text column. An XML file with nothing repeating becomes a single row.
- Why is my XML refused as unsafe?
- XML can declare its own entities in a DOCTYPE, and a tiny file can use them to expand into gigabytes (the "billion laughs" attack). This page does not expand declared entities: it refuses a file that declares them and asks you to remove the DOCTYPE. The usual built-in entities such as & and character references are read normally. Badly formed XML is reported with the line and column of the problem.
- Can Excel open XML directly instead?
- Desktop Excel for Windows can import some XML through Developer › Import with a schema map, which often fails on nested data. This page needs no schema and works in any browser, including on a Mac, a Chromebook or a phone.
- Which row of a spreadsheet becomes the JSON keys?
- The first row with anything in it, so a blank row or two above the table is skipped. Each column's header becomes the key; a column with no header is called column1, column2 and so on, and a repeated header gets _2, _3 added so no value is lost. Headers such as address.city become nested objects while "Dotted headers as nested objects" is ticked.
- How are Excel dates and several sheets written in the JSON?
- Dates become ISO 8601 text: 2024-05-01 for a date, 2024-05-01T09:30:00 with a time, and 09:30:00 for a time on its own. With All sheets ticked, the JSON is an object whose keys are the sheet names, each holding that sheet's rows; untick it to get just the first sheet as a plain array. Formulas give their saved results; none is calculated.
- How big a file can it convert?
- JSON and XML files up to 150 MB and spreadsheets up to 100 MB, worked on in the background so the page stays usable, with Stop to cancel. An Excel sheet holds at most 1,048,576 rows and a cell 32,767 characters: a bigger table can still be saved as CSV, and the page says when cells were cut. Very large files need a computer with plenty of memory.
- Is my JSON, XML or spreadsheet uploaded?
- No. The file is read and the result written in this browser tab on your device, which matters for exports full of customer records or keys. Nothing is sent to this site or anywhere else. Password-protected workbooks cannot be read; remove the password with Unprotect Excel first.