JSONL to Excel Converter
Paste JSON Lines or upload .jsonl files and download a clean Excel workbook - keys become columns, lines become rows.
How to Convert JSONL to Excel
- Paste or upload - one JSON object per line. .jsonl, .ndjson and .txt files are accepted, and several files at once come back as a ZIP of workbooks.
- Read the row count - the summary reports how many records are ready and how many lines were invalid before you download anything.
- Download XLSX - keys become the header row, records become rows, on a single sheet named Data.
How Lines Become Rows and Keys Become Columns
Each non-empty line is parsed on its own, so one malformed record cannot spoil the file. Blank lines are ignored silently. The header row is the union of every key across every record, in first-seen order: if the first line has id and name and a later line adds region, the sheet has three columns and the earlier rows are simply empty in the third. Within a single line, duplicate keys resolve the way JSON does - the last one wins.
| In the JSONL | In the cell |
|---|---|
| String | Text, exactly as written |
| Number | A numeric cell (doubles, so very long integers round) |
| true / false | A boolean cell, shown as TRUE or FALSE |
| null, or a key absent from that record | An empty cell |
| Object or array | Compact JSON text in one cell |
Edge Cases and Limits
- A whole JSON array pasted in is not JSONL. Either put one object per line, or use JSON to Excel, which reads arrays and flattens nested objects into columns.
- Trailing commas or wrapped lines make a line invalid; it is reported with its line number and skipped.
- Uploads are decoded with encoding detection first, so an export written as UTF-16 reads correctly instead of arriving as mojibake.
- Long text is truncated at 32,767 characters, the maximum a spreadsheet cell can hold.
- One sheet, always named Data - the format has no concept of multiple tables.
- Nothing is uploaded: parsing and workbook writing happen in the page, which matters for log exports that contain personal data.
Where JSONL Files Usually Come From
Three sources account for most of the files people convert here, and each has a predictable shape once it lands in a spreadsheet:
- Log and event exports - a timestamp, a level, a message, and a nested payload object that varies by event. The payload arrives as JSON text in one column; sort or filter on the flat columns and read the payload only where you need it.
- API and database dumps - uniform keys, so the sheet is rectangular. Watch the identifier columns: long numeric IDs should have been exported as strings, and if they were not, the values will already have been rounded by the time they reach the file.
- Machine-learning datasets - typically prompt and completion, or text and label, sometimes with a long text field. Cells are truncated at 32,767 characters, so a dataset of long documents is better inspected as text than as a spreadsheet.
Whatever the source, the converted workbook is a snapshot: editing the sheet does not change the .jsonl, and converting back with Excel to JSONL rebuilds the records from the header row, dropping empty cells rather than writing nulls.
When to Use a Different Tool
To go back the other way, Excel to JSONL writes one object per row. For a standard JSON array, or when you want nested fields expanded into their own columns, use JSON to Excel. Config-style records are usually easier as YAML - see YAML to Excel - and a flat export with a delimiter belongs in CSV to Excel. Once converted, Data Profiler gives a quick column-by-column view of what actually came through.
Frequently Asked Questions
JSON Lines (also called NDJSON) stores one complete JSON object per line, with no wrapping array and no commas between records. It is the usual export shape for logs, event streams, API dumps and machine-learning datasets, because a file can be appended to and read line by line without parsing the whole thing.
Every key seen anywhere in the file becomes a column, in the order it first appears, and a record that lacks a key simply gets an empty cell there. Ragged data converts without complaint - which is what makes this useful for log exports where later records gained fields.
They are written into the cell as compact JSON text - {"city":"Paris"} or [1,2,3] - rather than being flattened into extra columns. Nothing is dropped, and the cell can be parsed again downstream. If you would rather have one column per nested field, convert with JSON to Excel instead, which flattens nested structures.
They are skipped and counted, and the first error is reported with its line number and the parser's message. A line holding valid JSON that is not an object - an array, a string, a bare number - is reported the same way. As long as one valid object remains, the rest of the file still converts.
JSON numbers are parsed as IEEE doubles, which hold about 15-17 significant digits, so an ID like 12345678901234567890 arrives rounded. That is a property of JSON parsing, not of this tool. Export such identifiers as strings (quoted in the JSONL) and they arrive in the spreadsheet exactly as written.
The limit is your browser's memory: the text, the parsed records and the workbook all exist at once. Cells longer than 32,767 characters are truncated to what XLSX can store, and the sheet is capped at Excel's own 1,048,576 rows and 16,384 columns rather than failing the export.