JSON to Excel: CSV with UTF-8 BOM, Commas and Quotes
Updated 2026.10.03 · 5 min read
To open JSON in Excel, convert it to CSV with a UTF-8 BOM and RFC 4180 quoting. See how commas, quotes, line breaks and leading zeros are handled.
Open JSON ↔ CSV ConverterThe simplest way to get JSON data into Excel is CSV: turn the array of objects into rows, save the file as UTF-8 with a byte order mark (BOM), and quote every value that contains a comma, a double quote or a line break. The BOM keeps accented and non-Latin text from turning into garbled characters, and the quoting keeps each value in its own cell. The JSON ↔ CSV Converter applies all of this by default.
From JSON to rows and columns
A table needs rows with the same columns, so the input should be an array of objects. Each object becomes a row and each key becomes a column.
- Column order. Columns appear in the order the keys are first seen. A key that first shows up in a later object is added on the right, and rows that lack it get an empty cell.
- Nested objects. By default they are flattened into dot paths, so
{"a":{"b":1}}fills a column nameda.b. The alternative is to keep the nested object as a JSON string in one cell. - Arrays inside a row. They are written as a JSON string in one cell.
- Other shapes. A single object such as
{"a":1}is treated as one row. A bare value such as"text"cannot become a table, and the tool reports “This JSON cannot become a CSV table”.
Two objects with different keys show the first two rules together:
Input [{"a":{"b":1}},{"c":2}]
Output a.b,c
1,
,2
Flattening is also what prevents the classic [object Object] cell, which is what JavaScript produces when an object is turned into text without being serialized.
Commas, quotes and line breaks
CSV has no official standard. RFC 4180 is an informational document that, in its own words, records the format that seems to be followed by most implementations. Its rules for awkward values are short:
- Fields containing line breaks, double quotes or commas should be enclosed in double quotes.
- A double quote inside such a field is escaped by writing it twice.
- Each record is on its own line, and the line break is CRLF.
Applied to real data:
Input [{"id":1,"name":"Kim, Jr."},{"id":2,"name":"이\"민\""}]
Output id,name
1,"Kim, Jr."
2,"이""민"""
The first name contains a comma, so it is quoted and stays in one cell instead of spilling into a third column. The second contains double quotes, so the value is quoted and each inner quote is doubled; the three quotes at the end are one doubled quote plus the closing one. Values without special characters are left bare.
A line break inside a quoted field is part of the value. Excel shows it as a multi-line cell, while a naive script that splits the file on line breaks will cut the record in half. This is the reason not to build CSV by joining values with commas: it works until the first address, product description or comment field arrives.
The BOM and garbled text
A CSV file carries no label saying which encoding it uses. The UTF-8 byte order mark is the character U+FEFF written at the very start of the file, which RFC 3629 gives as the three bytes EF BB BF. It acts as a signature that says “this is UTF-8”.
Microsoft’s support article is direct about it: you can open a CSV file encoded with UTF-8 normally if it was saved with a BOM. Otherwise the same article tells you to go through the Data tab and import the file with Get Data from Text/CSV, or to use the Text Import Wizard.
Without the signature, the bytes may be read in an older, regional encoding instead, and every character outside ASCII comes out wrong. Decoding the same UTF-8 bytes in three legacy encodings shows what that looks like:
| Text written as UTF-8 | Read as | What appears |
|---|---|---|
Zoë, café |
Windows-1252 | Zoë, café |
주문 |
CP949 (Korean) | 二쇰Ц |
名前 |
Shift_JIS (Japanese) | 蜷榊燕 |
The data is not damaged in any of these cases. The file is valid UTF-8 and only the reading is wrong, so the fix is to add the BOM or to import the file with the encoding chosen explicitly.
In the converter, the UTF-8 BOM option for downloads is on by default. Turn it off when the CSV is going to another program rather than to Excel: a parser that does not expect the mark can treat it as an invisible character attached to the first column name. JSON goes the other way entirely, and RFC 8259 says implementations must not add a BOM to JSON sent over a network. When you open a file that starts with a BOM in the tool, the mark is stripped and “BOM removed” is shown.
What Excel changes after opening
Even a correct CSV can look wrong, because Excel converts what it thinks are numbers and dates. Microsoft documents these automatic conversions:
- Leading zeros are removed, so
007becomes 7. - Large numbers are shown in scientific notation, like 1.23E+15, and numeric data is truncated to 15 digits of precision, which alters long IDs and card-style numbers.
- Text with the letter E between digits is read as scientific notation.
- Some strings of letters and numbers are converted to dates.
The file still contains the original characters; the change happens while Excel reads it. To keep such columns as text, Microsoft’s instructions are to import instead of double-clicking: on the Data tab choose From Text/CSV, press Edit in the preview, select the column, set its data type to Text, and then Close & Load. As of October 2026, the same article notes that Excel for Microsoft 365 and Excel 2024 also have Automatic Data Conversion settings for switching these behaviors off.
The reverse trip has the same trap. When you convert CSV back to JSON, number inference in the converter is off by default, so the CSV
id,zip
1,007
becomes [{"id": "1", "zip": "007"}] (shown here on one line), with the postal code intact as a string.
Symptoms and fixes
| Symptom in Excel | Cause | Fix |
|---|---|---|
| Accented or non-Latin text is garbled | UTF-8 file without a BOM | Save with a BOM, or import from the Data tab |
| Values shifted into the wrong columns | A comma inside an unquoted value | Quote the field |
| One record split across several rows | A line break inside an unquoted value | Quote the field |
007 shown as 7, long IDs as 1.23E+15 |
Automatic number conversion | Import the column as Text |
[object Object] in a cell |
A nested object written without serialization | Flatten to dot paths or write a JSON string |
Converting with ZEKILO Dev
- Open the JSON ↔ CSV Converter and paste the JSON, or open a
.jsonfile. - Adjust the options if needed: delimiter (comma, semicolon, tab or pipe), how nested objects are written, line breaks (CRLF or LF) and the UTF-8 BOM.
- Download the
.csvfile and open it in Excel.
The conversion runs in your browser, and the data is not sent to a server.
Summary
- Convert an array of objects to CSV; nested objects become dot-path columns.
- Quote values that contain commas, double quotes or line breaks, and double the inner quotes, as RFC 4180 describes.
- Save as UTF-8 with a BOM (
EF BB BF) so that Excel reads non-ASCII text correctly, and leave the BOM out for other programs. - Import columns such as postal codes and long IDs as text so that Excel does not rewrite them.
Tools for this guide
Sources
- RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
- RFC 3629 — UTF-8, a transformation format of ISO 10646 (section 6, Byte order mark)
- RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
- Microsoft Support — Opening CSV UTF-8 files correctly in Excel
- Microsoft Support — Keeping leading zeros and large numbers