JSONL to CSV
Flatten newline-delimited JSON into a spreadsheet-shaped CSV. Every line's keys are collected so nothing is dropped when records have different fields, nested objects become parent.child columns, and a malformed line is skipped and counted rather than killing the whole conversion.
How to convert JSONL to CSV
- Paste the JSONL or drop a
.jsonl/.ndjsonfile. - Leave flatten nested objects on to turn
{"user":{"name":"Ada"}}into auser.namecolumn. - Choose how arrays are represented — a JSON string in one cell, or one column per index.
- Check the status line for skipped lines, then copy or download.
Ragged records are handled
Real JSONL is rarely uniform: optional fields appear in some records and not others. The column list is the union of every key seen, in the order they first appear, and records missing a key simply get an empty cell. That means the CSV is complete even when the input is inconsistent — but a column that's empty for most rows is a signal worth checking with Data profile afterwards.
Arrays: JSON string or indexed columns
A JSON string keeps ["x","y"] in a single cell — lossless, and easy to parse again later. Indexed columns spread it across tags.0, tags.1, … which is easier to read in a spreadsheet but produces as many columns as the longest array in the file. For arrays of objects, indexing goes deeper: items.0.sku. If arrays are the real content rather than a detail, unpacking them into rows is usually better — convert with arrays as JSON, then reshape with Unpivot.
FAQ
Will it read a plain JSON array file?
Yes, if the array is on one line — its elements are treated as records. For pretty-printed multi-line JSON, use JSON to CSV instead.
What happens to a broken line?
It's skipped and counted in the status line, so one truncated record doesn't cost you the other 50,000.
Why are my nested keys named with dots?
Dot notation is the convention that survives round-tripping and is understood by pandas, jq, and most loaders. Rename them with Header row if your target needs different names.
Is anything uploaded?
No — it runs in your browser.
Privacy
100% client-side. No upload. See the privacy policy.