Local jq filter processor

A bounded subset of the jq language: paths, indexes, slices, iteration and ?; pipes, comma streams and the // default; arrays and objects; comparisons, and/or and…

  • Runs in your browser
  • No upload
  • Check before download

Inputs stay in this tab and are not uploaded or saved automatically. Optional aggregate usage counts and coarse processing diagnostics are sent only after consent, without input content or filenames. Clearing or closing loses inputs; save needed outputs first.

Formats and limits

A bounded subset of the jq language: paths, indexes, slices, iteration and ?; pipes, comma streams and the // default; arrays and objects; comparisons, and/or and arithmetic; and map, select, length, keys, type, tostring, tonumber, has, add, reverse, first, last, sort, sort_by, unique, range, empty and not. Limits: 100,000 steps, 1,000 emitted values and 2,048 AST nodes. Variables, definitions, modules and I/O are not available; this is not full jq.

UTF-8 only. Input up to 1 MiB; XML up to 100,000 UTF-16 units and depth 64; JSON up to 20,000 nodes. JSON Lines up to 16 MiB, 100,000 records and 1 MiB per value. Output up to 32 MiB. Queries run for up to 3 seconds and other jobs for up to 10 seconds in a worker you can cancel. XSD native memory is limited to 64 MiB; this is not the whole worker or DOM heap.

How to use it

  1. Choose the source and mode

    Paste one JSON document and start with . to return it unchanged. To list the active IDs, use .items[] | select(.active) | .id. Choose JSON array or JSONL output before you run the filter.

  2. Configure the domain parameters

    In the loaded example, IDs 1 and 3 are active and ID 2 is not. The filter above gives [1,3] in array mode, or 1 and then 3 on separate JSONL lines. With map(...) instead, the filter produces a single array, so array output wraps it as [[...]].

  3. Inspect diagnostics and download

    Check how many values were produced, then download jq-result.json or jq-result.jsonl. No matches gives a valid empty array or empty stream, which is different from a parser error. The input is one JSON document, not an unframed JSONL stream.

Formats and limits

Why is this input rejected or empty?

Check the filter syntax, the shape of the input and the numeric diagnostics. If an integer loses safe precision, quote it as an ID string; the tool won't round it silently. Variables, custom def and imported modules are not supported, which is different from a missing input field.

Which parser profile and limits apply?

A limited subset of jq, not the jq command line: only paths, iteration, pipes and the functions listed. At most 1000 emitted values, 100000 steps and 2048 AST nodes, and no filesystem, network, modules or arbitrary code.

Are inputs or referenced files sent to a server?

Parsing runs locally in a browser worker. URLs inside the input are not used to fetch remote documents. Supply any schema dependencies the tool supports as local files, keep your source file separately, and download the results before you close the page.