JSONL to CSV

Convert JSONL to CSV in your browser

Free JSONL to CSV converter, no signup, nothing uploaded. Drop a .jsonl or .ndjson file up to 1.5 GB: each line is a row, nested keys 4 levels deep become columns, press Export and download a CSV with a header row. The 1,319-line GSM8K test set opens as 1,319 rows and 2 columns.

.jsonl
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open GSM8K math eval, test split (1,319 rows, 750 KB).

Where JSONL files come from

One JSON object per line, no surrounding array: that is JSON Lines, also called NDJSON or newline-delimited JSON. It is what log shippers, Elasticsearch bulk exports, OpenAI fine-tuning and batch files, LLM eval sets like GSM8K, and most data pipelines write, because a file can be appended to and split without re-parsing.

Spreadsheets don't read it. This page opens .jsonl, .ndjson and .ldjson files with DuckDB inside your browser tab and turns them into a table you can filter and export.

Ragged lines and nested keys

Lines rarely have identical keys. The columns are the union of the keys found while reading (the whole file up to 50 MB, a sample above that), and a key that is missing on a line becomes an empty cell. Nested objects flatten into dot-path columns like request.headers.host, up to 4 levels and 200 columns.

Arrays stay as JSON text inside the cell, so a log line with a tags array keeps its tags in one column. Types are detected per column: numbers stay numbers, true stays a boolean, and a column that mixes shapes is kept as text.

Export the rows you need

Export writes the current view. Filter with level:error or status:>=500, add -level:debug to drop noise, hide the columns you don't want, and the CSV follows. Plain filters have no row cap; SQL results stop at 1,000,000 rows.

Aggregates are a query away: SELECT path, count(*) AS hits FROM data GROUP BY 1 ORDER BY 2 DESC and then Export, as CSV or as a Markdown table for a ticket.

What the CSV looks like

UTF-8, comma separated, one header row, values quoted when they contain commas, quotes or line breaks, nulls as empty cells. Text that starts with =, +, - or @ gets a leading apostrophe, so a spreadsheet won't treat a logged payload as a formula.

The same Export menu writes Parquet with zstd compression, a JSON array, JSONL again (after filtering) and a Markdown table of the first 1,000 rows.

Bigger jobs and the other direction

The limit is 1.5 GB per file, the memory of one tab. Past that, DuckDB on your machine does the same thing: duckdb -c "COPY (SELECT * FROM read_json('logs.jsonl')) TO 'logs.csv' (HEADER)".

Going from CSV to JSONL is the same Export menu on the CSV to JSON page. To hand the table to someone, press Share or run curl -T logs.jsonl https://rows.page: files up to 100 MB, link deleted after 7 days unless you keep it.

Limits for converting JSONL to CSV

WhatLimit or price
Open in the browser.jsonl, .ndjson and .ldjson files up to 1.5 GB, $0, no account
ColumnsUnion of the keys found; nested objects flatten up to 4 levels and 200 columns
ArraysKept as JSON text inside the CSV cell
OutputCSV with a header row, UTF-8, formula-safe cells
RowsNo cap through filters; SQL results export the first 1,000,000 rows
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Is my JSONL file uploaded?

No. Opening a file reads it inside your browser tab. It only leaves your machine if you share it or push it with curl.

Some lines have keys that others don't. What happens?

Every key found becomes a column and missing values are empty cells. If a key only appears far into a file bigger than 50 MB, the sample may miss it; filter or split the file if that matters.

Can I convert a .json file that has one object per line?

Yes. The format is sniffed from the content, so a newline-delimited file with a .json extension opens the same way.

My JSONL has 20 million lines. Will it work?

If the file is under 1.5 GB, yes. Above that it loads partially with a note saying how many rows made it, and the export contains those rows.

How do I convert JSONL to CSV in a script?

The browser does the work here, there is no conversion API. DuckDB on your machine is the same engine: COPY (SELECT * FROM read_json('data.jsonl')) TO 'data.csv' (HEADER).

More tools

Pushing data from a script or agent? Read the docs.