Short answer
Parse NDJSON line by line. Keep valid records available, report malformed lines separately and use table search when the records have a consistent object shape.
Key points
- NDJSON and JSONL contain independent JSON values separated by newlines.
- The complete file is not one JSON array and should not be parsed as one.
- Line-level errors let you repair a bad record without losing the rest of the dataset.
Why a normal JSON parser rejects the file
A JSON document has one top-level value. NDJSON deliberately places another complete JSON value on each line. The format is convenient for logs, streaming pipelines and append-only exports, but the full text is not a valid JSON array.
Pasting NDJSON into a conventional JSON formatter often produces an error after the first line. That error describes the parser mismatch, not necessarily a broken dataset.
{"time":"2026-07-28T09:00:00Z","status":200}
{"time":"2026-07-28T09:00:01Z","status":503}
{"time":"2026-07-28T09:00:02Z","status":200}Keep valid records around a bad line
Line-delimited parsing creates a useful failure boundary. If line 417 is malformed, lines 1 through 416 and 418 onward can still be inspected. The viewer should report the line number and preserve the original source so the record can be corrected.
This matters for incident logs and bulk exports, where throwing away every valid record because of one truncated write is usually the least helpful behaviour.
Choose table or tree by shape
An object-per-line dataset with recurring fields maps naturally to a table. Columns make status codes, timestamps and identifiers easy to scan and filter. Records with highly variable or deeply nested structures are usually clearer in a tree.
Keep raw source nearby in both cases. A table is a projection of the records; it should not conceal malformed lines or imply that every object has the same schema.
A practical NDJSON debugging loop
Blobster detects NDJSON and JSONL, shows object-like records as a table where practical and keeps invalid lines separate from valid rows. The document remains local, including edits and copied subsets.
- Open the
.ndjsonor.jsonlfile locally. - Confirm record count and review any invalid-line summary.
- Filter by the field involved in the incident.
- Open the matching record in tree or raw form.
- Copy only the relevant row or a redacted subset.