Tools · NDJSON

# NDJSON viewer

One JSON value per line. A broken line is a broken line, not a broken file — it is counted, shown, and the other lines still read.

JSON, YAML, XML, CSV, a log file, or something broken. It stays in this tab.

no signup · runs entirely in your browser · ⌘V works anywhere on this page

## What it does

- Reads the sample as 5 lines, 1 of them broken — the verdict says so, and “broken only” shows just that one
- Level chips — info · warn · error — from the level field, several at once, each with its count
- A filter box that takes words, field=value and /regex/, with the match count measured
- A record’s fields in a panel; a field holding packed JSON opens as nested rows
- Convert the rows to CSV, a Markdown table, YAML or a JSON array; Compare two runs by record

## What it will not do

- Stream from a URL or tail a file — the text you paste or drop is the text it reads.
- Fix a broken line without asking. Broken rows are grouped by cause and fixed by the group when you say.
- Upload the file. It is read in your tab, and a large input is stored in this browser only.

## The sample

The text below is what the first chip opens — a real document the engine reads, not an illustration written for this page.

```
{"ts":"2026-04-21T14:32:08.412Z","level":"info","msg":"stripe.charge.completed","amount":17054,"order_id":"ord_8f3aa19c4d"}
{"ts":"2026-04-21T14:32:07.940Z","level":"warn","msg":"retry.scheduled","attempt":2,"backoff_ms":400}
{"ts":"2026-04-21T14:32:07.813Z","level":"error","msg":"stripe.webhook.signature_invalid","payload":"{\"event\":\"charge.succeeded\",\"id\":\"evt_1PZ3xK\"}"}
{"ts":"2026-04-21T14:32:07.512Z","level":"info","msg":"cart.items.priced","items":2,"total":14900
{"ts":"2026-04-21T14:32:06.301Z","level":"info","msg":"session.token.issued","ttl":3600}
```

## How

- Drop the .ndjson or .jsonl file on the page, or paste its lines.
- Read the verdict — the record count, and how many will not parse — and click a row for its fields.
- Filter by level, by field=value or broken only; Convert or Compare from the row above the list.

## Questions

### What is the difference between NDJSON and JSON Lines?

None that matters here: both are one JSON value per line, newline-separated. .ndjson, .jsonl and .log files open the same way.

### Can I convert NDJSON to a JSON array?

Yes — Convert writes the rows as a JSON array, or as CSV, YAML, XML or a Markdown table.

### Can I see only the errors?

Yes. The level chips filter by the level field, and “broken only” shows the lines that did not parse.

### Does a broken line stop the file?

No. Each line parses on its own; the broken one is counted and listed, and the others read.

## Behind this page

## Try it on the file that broke your afternoon.

free while in alpha · no signup

---

Canonical: https://unstringify.com/tools/ndjson-viewer
