JSONL is where conversation logs, evaluation sets, training data and batch jobs all end up, and it fails in ways ordinary JSON does not. One bad line in the middle of fifty thousand good ones; a trailing blank; a file that is really a pretty-printed array with commas at the end of every line. “Invalid JSON” about a forty-megabyte file helps nobody, so everything here reports per line, with the line number an editor would show. Blank lines are skipped rather than counted as errors, and the array-pretending-to-be-JSONL case is detected and offered as a one-click conversion.
Features
Every failure reported against its line number
Blank lines skipped without shifting the numbering
Detects a pretty-printed array pasted as JSONL, and converts it
Every key across the records, with how many carry it
Filter by a dotted path, or across the whole record
Step through records one at a time, pretty-printed
Converts to a JSON array and back
Drop a file in, or paste it
How to use the JSONL Viewer & Validator
Drop in a .jsonl file, or paste it
Check the valid and invalid counts
Filter to the records you care about
Step through them, or export as an array
Example
Input
line 2: not json
Output
Unexpected token o in JSON at position 1
The other 49,999 lines are still parsed and usable.
Common errors & troubleshooting
Every line fails. — It is probably a pretty-printed JSON array rather than JSONL. That case is detected and a conversion is offered.
The line numbers do not match my editor. — They should — blank lines are skipped for parsing but do not shift the numbering, so a reported line is the line your editor shows.
My filter path finds nothing. — Paths are dotted, with numeric segments for array indices: messages.0.content. The key list above the filter shows what is actually present.
A huge file is slow. — Everything is parsed in the browser, so a very large file is limited by memory. Splitting it is faster than waiting.
Frequently asked questions
What is JSONL?
One complete JSON value per line, with no commas between them and no enclosing brackets. It streams and appends well, which is why logs and datasets use it, and it means a single malformed line does not invalidate the file.
Why does my file look like JSONL but fail?
Almost always because it is a pretty-printed array — one object spread over several lines, with a comma at the end of each. That is valid JSON and not valid JSONL, and it is detected here with a conversion offered.
How does the path filter work?
Dotted segments, with numbers for array indices. The value at that path is searched as a case-insensitive substring, so filtering on the first message's content is one expression.
Are trailing blank lines a problem?
No. A file ending with a newline is normal and correct; blank lines are counted separately and never reported as errors.
Is my file uploaded?
No. Everything is parsed in the browser, which matters for the usual contents of a JSONL file — conversation logs and training data are among the most sensitive files a team has.