Analyze JSONL / NDJSON log lines
Paste newline-delimited JSON (JSONL / NDJSON) and read it as a table — each line is one record — so you can scan a field across many log entries instead of parsing the stream by eye.
Open the tool, then paste the sample input below. Everything runs locally in your browser.
The problem
Structured logs are emitted as JSON Lines: one JSON object per line. A wall of them is unreadable, and a normal JSON parser rejects the whole stream because it is not a single document. Viewing each line as a row lets you scan and compare fields across entries.
Sample input
{"ts":"10:00","level":"info","msg":"start"}
{"ts":"10:01","level":"error","msg":"db timeout"}
{"ts":"10:02","level":"info","msg":"retry"}
Expected output
ts level msg
10:00 info start
10:01 error db timeout
10:02 info retry
Each line becomes a row and the union of keys becomes the columns, so you can scan the level column to find the error among the info lines.
How to do it
- Paste the JSONL or NDJSON log.
- View each line as a table row.
- Scan a column such as level across all rows.
- Expand a row to see its full record.
- Copy the rows or fields you need.
Common mistakes
- Pasting JSONL into a normal JSON parser, which rejects multiple objects.
- A trailing blank line producing an empty record.
- Lines with different keys leaving gaps in some columns.
- Very large logs that are better filtered before viewing.
- Treating a pretty-printed multi-line object as one JSONL line.
Related tools
Related guides
FAQ
What is JSONL or NDJSON?
JSON Lines (also called NDJSON) is a format where each line is a separate JSON object. It is common for logs and streaming because you can append one record at a time.
Why does a JSON parser reject my log?
A standard JSON parser expects a single document. A JSONL stream is many objects separated by newlines, so it must be parsed line by line.
How do I scan a field across many lines?
View the JSONL as a table where each line is a row and keys are columns. Then read down a single column, such as level, across all records.
What if lines have different fields?
The columns are the union of all keys, so a record missing a field simply shows an empty cell in that column.
Is my log uploaded?
No. Parsing runs locally in your browser. Your log is not sent to a server.
JSONL parsing runs locally in your browser. Nothing is uploaded.
View JSONL logs, format and query JSON, and work with API payloads — grouped in one place.
Practical example and expected result
Paste newline-delimited JSON (JSONL / NDJSON) and read it as a table - each line is one record - so you can scan a field across many log entries instead of parsing the stream by eye. In practice, this is most useful when you need a quick, repeatable check on a JSON payload before adding it to a ticket, pull request, test fixture, or support note.
A realistic input for this workflow is {"ts":"10:00","level":"info","msg":"start"} {"ts":"10:01","level":"error","msg":"db timeout"} {"ts":"10:02","level":"info","msg":"retry"}. The expected result should resemble ts level msg 10:00 info start 10:01 error db timeout 10:02 info retry, with the same important values preserved.
Troubleshooting checklist
- Confirm you copied the complete JSON payload and not only a partial line or truncated preview.
- Run the local tool once with a safe sample, then repeat with the real data only if your team policy allows it.
- Check quoting, escaping, whitespace, encoding, timestamps, and environment-specific values before trusting the result.
- Before sharing output, remove secrets, tokens, cookies, customer data, and production hostnames that are not needed for the review.
Next useful steps
- Open this example in JSONL Log Viewer → for a related validation or follow-up step.
- Format a single record for a related validation or follow-up step.
- Query a record with JSONPath for a related validation or follow-up step.
- Use Magic Box when you are not sure which tool should handle the next artifact.