What This Tool Does
Paste JSON, write a jq filter, and run it — entirely in your browser. A WebAssembly module compiled from jaq, a pure-Rust reimplementation of the jq language, compiles and runs your filter on your own device. Nothing is uploaded to make this work: your JSON and your filter never leave your browser tab.
How to Use It
Paste your JSON into the input box, or load it from a file. Type a jq filter into the filter box — or click one of the example buttons to start from a working one — and click Run. Each value your filter produces appears as a separate result underneath, in the order the filter emitted them; copy any single result or the full output once you're happy with it.
A jq Mini-Cookbook
jq filters read left to right, and the pipe character | chains one filter's output into the next filter's input. A handful of patterns cover most everyday needs:
.
The identity filter — returns the input completely unchanged. Useful for confirming your JSON parsed the way you expect before writing anything more complex.
.foo
Field access — pulls the value of the key foo out of an object. Chain it to go deeper, e.g. .foo.bar.
.[] | .name
Iterate, then access a field — .[] streams out every element of an array (or every value of an object) one at a time, and the pipe sends each one into .name, producing one output per element that has that key.
map(.x)
Builds a single new array by applying .x to every element of the input array — the array-preserving counterpart to .[] | .x.
keys
Returns an array of an object's keys, sorted alphabetically — handy for a quick look at an unfamiliar document's shape.
.[] | select(.age > 30)
Iterate, then keep only the elements matching a condition — select passes a value through unchanged when the condition is true and drops it otherwise, which is how you filter an array of objects down to the ones you care about.
now
The current Unix timestamp in seconds, supplied by your browser tab so it's always in sync with your own clock rather than depending on a server.
Number Semantics: jq Is f64-Based, Like the Real Thing
This tool mirrors the real jq CLI's number handling, which is different from the Formatter tool on this site. Once a number passes through a jq filter, it's represented as a 64-bit floating-point double — the same representation JavaScript uses — so an enormous integer can come back looking slightly different from how it went in, exactly the way it would with the official jq binary. That's expected jq behavior, not a bug in this tool, and it only matters for numbers past about seventeen significant digits; everyday values are unaffected.
If you need a number preserved exactly as written — say, formatting a document that contains a very large ID or a long decimal without touching a single digit — use the JSON Formatter instead. It parses with Rust in a mode that keeps each number's exact source text, which is what makes it byte-exact where a query-and-transform tool like this one, by design, is not.
Limits
Input JSON is capped at 10 MB, and a single run is capped at 10,000 output values. Both limits stop the run up front with a clear message rather than letting your browser tab stall trying to process or render more than it comfortably can.
Where to Go Next
If what you actually need is to clean up, validate, or minify a JSON document rather than query or transform it — especially one containing very large numbers you don't want altered — the JSON Formatter does that job and keeps every digit exactly as you wrote it.