jq subset · client-side · zero install

Run jq queries right in your browser

Filter, transform, and extract from JSON with a jq-compatible expression. No install, no server — paste, query, copy.

JQ Playground Workspace
Input size
273 B
8 lines
Output size
15 B
2 results
Filter
.users[] | select(.active) |…
34 chars
Status
OK
jq subset
jq filter
input · json
output · filtered
"Alice"
"Carol"
Step-by-step Tutorial

How to query JSON with jq, the right way

jq is a powerful command-line filter for JSON. This in-browser playground supports the most useful subset of jq syntax — paths, pipes, comma streams, select, map, keys, values, length, type, has, comparisons, and literal arguments — so you can iterate on queries without leaving the page or installing anything.

  1. 01

    Paste a JSON document

    Drop a JSON object or array into the input panel. Anything that parses cleanly works — REST/GraphQL responses, log lines, NoSQL records, OpenAPI specs, Kubernetes manifests, or local package.json / composer.json / Cargo.toml-style files.

    Errors at parse time show before the filter even runs, with the exact character position so you can fix typos quickly.

    API responselog lineconfig
    input · json.json
    {
      "users": [
        {"name":"Ada","active":true}
      ]
    }
    loadedready to query
  2. 02

    Write a jq filter

    Start with . to echo the document. Drill into a field with .users, expand an array with .users[], then chain with |. Filter with select(.active), transform with map(.name), count with length, list keys with keys.

    Compare with == / != / > / < against literals or other path expressions. Use , at the top level to emit multiple streams.

    selectmappipe |comma ,
    filterpipeline
    .users[] | select(.active) | .name
    3 stagesexplode → filter → project
  3. 03

    Inspect each result

    Every matching value emits on its own line in the output panel — the same way the jq CLI prints results. Syntax errors in the filter (unclosed brackets, missing arguments, unknown functions) surface with a descriptive message.

    Use the Reset filter button to clear back to . and start over, or just edit inline and the output updates immediately.

    live previewper-line resultserror pinpoint
    output · filtered2 results
    "Alice"
    "Carol"
    2 active usersmatched
  4. 04

    Copy or download the result

    Copy the filtered output to your clipboard for pasting into a CSV, dashboard, or test fixture. Or save it as a .json file ready to commit, post to an API, or hand off downstream.

    Everything runs locally — open DevTools → Network to confirm no traffic leaves the page.

    clipboard.jsonclient-side
    export2 outputs
    ✓ Copied to clipboard
    ✓ Saved: jq-output.json
    ✓ 0 outbound requests
    ✓ 100% client-side
    ready to shipsuccess
Pro tips

Production-grade jq playgrounds, the right way

Iterate small

Build filters one stage at a time. . → .users → .users[] → .users[] | .name. Each pipe should be obvious.

Prefer map over [ ]

Use map(f) when you want to keep the array shape; use .[] | f when you want a stream of values.

Quote string literals

Comparisons use JSON literals: .role == "admin", not .role == admin.

Subset of full jq

This playground covers ~80% of common queries. For recurse, group_by, reduce, or modules, use the official jq CLI.

Numbers parse as JSON

Compare with .age > 30 (number) not .age > "30" (string). JS coercion can surprise you.

Clipboard-safe output

Output is JSON-encoded so quotes and Unicode survive a copy/paste round-trip into another tool.

Use Cases

When to reach for jq

jq earns its keep whenever you need to extract a slice from a large JSON blob without writing a one-off script.

Probing API responses

Curl a JSON endpoint, paste here, and pull out just the field you need — .data.items | length or .errors[].message.

no jq install needed

Filtering structured logs

JSON-formatted logs from Cloud Run, Vercel, or Datadog become greppable. select(.level=="error") | .msg in one line.

incident triage faster

Reshaping for CSV / spreadsheets

Use map({ name, role }) to flatten before exporting. Pipe the output into the JSON-to-CSV tool for a finished spreadsheet.

RFC 8259 valid

Diffing API contracts

Project just the schema-relevant keys with keys or a sorted map(.name) and compare across two API versions to spot breaking changes.

spot breaking changes

Sanity-checking config drift

Paste two Helm/Kustomize outputs side by side. A quick .spec.replicas or .metadata.labels verifies the field you care about.

no kubectl required

Teaching JSON shape

Demonstrating how a JSON tree maps to dot paths in a workshop or code review — much clearer with a live filter than abstract slides.

production-ready
FAQ

Frequently asked questions

Quick answers about the in-browser jq playground.

A practical subset: paths, pipes, comma streams, comparisons, select, map, keys, values, length, type, has, not. Modules, recurse, reduce, group_by, regex, and stdin/stdout idioms aren't supported — use the CLI for those.
Most issues are quoting (use double quotes for string literals, e.g. .role == "admin") or piping (use | between stages, , for streams). Errors show the offending token.
No. Parsing and filtering run locally in your browser. Open DevTools → Network to confirm zero outbound requests.
Practically your tab's memory ceiling — tens of MB before things slow. JSON.parse runs in a single tick, so very large documents block the UI briefly.
Not via URL yet — copy the JSON + filter manually for now. URL-shareable workspaces are on the roadmap.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!