All Tools View Categories About Contact Privacy

JSON Log Parser

Parse JSON Lines into a searchable table, or pretty-print any single JSON document with syntax coloring.

Runs entirely in your browser — your logs never leave this page.
0
lines
0
parsed
0
failed
0
columns

  

  

About JSON Log Parser

Modern services log as JSON Lines: one compact JSON object per line, stamped with a timestamp, a level, and a service name. They are machine-perfect and hopeless to read by eye — a wall of keys and colons where the actual error is one nested object deep. JSON Log Parser reads those records and lays them out as a table, right in your browser, with no upload and no server round trip.

Paste a JSONL stream and every object becomes a row, with columns formed dynamically from the keys that actually appear in your data — you never define a schema up front. The parser scans your first record for a "level-ish" field (level, severity, lvl, log_level, logLevel or levelname, checked in that priority order across every record so the most common convention wins even if the first line happens to use a different key), then colors that column with ERROR / WARN / INFO / DEBUG badges so the eye is drawn straight to failures. Nested objects and arrays stay inspectable as compact inline JSON in their cell instead of being flattened away or stringified beyond recognition, invalid lines are separated into their own panel with line numbers instead of being silently dropped or crashing the whole parse, and a live filter box instantly narrows tens of thousands of lines down to the one request or event you actually care about — it matches against the full JSON of each record, so you can search on a value, a key name, or a level in one box.

When the shape of a document matters more than a set of rows — a config file, an API response body, a single webhook payload — flip to Single document mode instead. It pretty-prints one JSON value with syntax coloring for strings, keys, numbers, booleans and null, plus a quick type summary (object, array, or primitive) and a list of the top-level keys so you can see the document’s shape at a glance without scrolling through it line by line.

This tool is aimed at the everyday grind of debugging structured logs: pasting a chunk of output from kubectl logs, a CloudWatch export, or a local dev server, and needing to find the one ERROR among thousands of INFO lines without writing a jq pipeline first. Everything runs client-side — no data is uploaded, no network request is made — and when you’re done you can copy the table as CSV, download CSV or JSON, or print it for a record.

Features

  • JSON Lines parser — one object per line into a searchable table.
  • Dynamic columns from the union of keys across your records, in first-seen order.
  • Priority-aware level detection — checks level, severity, lvl, log_level, logLevel, levelname in that order across all records, not just the first line.
  • Level badges colored for ERROR / FATAL / CRITICAL, WARN / WARNING, INFO / NOTICE, DEBUG / TRACE.
  • Nested objects and arrays rendered as compact inline JSON, with the full value in a hover title.
  • Live search across every record’s full JSON — keys, values, and levels alike.
  • Failed lines listed with their original line numbers, never dropped silently.
  • Pretty printer mode with syntax coloring, indentation, and a type/key summary.
  • Copy as CSV / Download CSV / Download JSON / Print export options.
  • 100% local — nothing leaves the browser, no accounts, no upload.

How to Use

  1. Paste your logs. Drop a JSONL stream into the box — one JSON object per line — or choose Single document for a pretty print of one larger value.
  2. Pick a mode. JSON Lines is selected by default; switch to Single JSON document if you’re pasting one object or array instead of a stream.
  3. Parse. Click Parse, or just keep typing — the tool re-parses automatically as you edit the input.
  4. Scan the summary. The stat cards show total lines, parsed records, failed records and column count; the level profile bar shows the ERROR/WARN/INFO/DEBUG mix and percentages at a glance.
  5. Filter. Type into the search box to keep only the records whose JSON matches — a status code, a user id, an error string.
  6. Inspect errors. Malformed lines are listed separately below the table with their original line numbers so you can go fix the source.
  7. Export. Copy the visible table as CSV, or download the full result as CSV / JSON, or print it.

Examples

Example 1 — Request logs. A gateway streaming lines like {"timestamp":"2025-06-11T10:00:01.000Z","level":"INFO","service":"api-gateway","path":"/v1/health","status":200,"latency_ms":12} becomes a searchable table with columns for timestamp, level, service, path, status and latency; filter on ERROR to keep only failures, or on a specific path to trace one endpoint.

Example 2 — Payment retries. {"level":"WARN","message":"retry 2/3 for payment_123","attempt":2,"meta":{"amount_cents":1999}} shows the nested meta object inline in its cell (hover to see the full JSON) and the WARN badge rendered in amber, next to the retry message and attempt count.

Example 3 — Single config or response. Paste any object or array in Single document mode — an API response body, an environment config, a webhook payload — for a syntax-colored pretty print with its top-level keys listed as chips, so you can confirm the shape without hunting through raw text.

Example 4 — Mixed-quality stream. A log file with a stray plain-text line (a restart banner, a truncated write) among otherwise-valid JSON still parses: the good lines fill the table, the bad line is reported by line number in the Failed lines panel instead of aborting the whole parse.

Example 5 — Handover to a pipeline. Download JSON and every parsed record arrives intact — including nested values, arrays and nulls — ready to feed into a data pipeline, spreadsheet, or another tool that expects clean JSON instead of a raw log file.

Benefits

  • No code or schema required — columns appear automatically from whatever keys your logs actually use.
  • Bad JSON surfaces immediately with a line number, instead of silently vanishing or breaking a downstream parser.
  • Consistent level detection across the whole file, not just whatever the first line happens to contain.
  • Instant filtering over any field without writing a query language.
  • CSV / JSON export ready for spreadsheets, dashboards, or pipelines.
  • Private by design — all parsing happens in your browser; nothing is uploaded.

Frequently Asked Questions

What formats does this parser understand?
Two ways to work. JSON Lines mode expects one JSON object per line, which is how application logs are usually shipped (JSONL / NDJSON). Single document mode pretty-prints one larger JSON value (an object or array) with syntax coloring and indentation.
What happens to a line that is not valid JSON?
Invalid lines are not silently dropped — they are counted as failed records and listed below the table with their line number, so you can spot hand-inserted notes or truncated entries.
How does the table get its columns?
Columns are the union of all keys seen across your records, in the order they first appear. If a record has a level-ish key (level, severity, lvl, log_level...), that column gets a colored badge for ERROR / WARN / INFO / DEBUG.
Nested objects show up as what?
Any value that is itself an object or array is rendered as compact inline JSON in its cell, while primitives (strings, numbers, booleans, null) show directly. The raw value is preserved in the JSON export.
Can I search inside the parsed records?
Yes. The filter box matches any text across the whole JSON of each record — a value, a key, or a level — and the table re-renders instantly to the matching subset.
Is my JSON uploaded anywhere?
No. Everything is parsed in your browser with no network requests.