EUComply

Filtering JSON Without Learning jq Syntax

September 2026 · 5 min read · Try it in your browser →

jq is brilliant once you know it — and famously opaque if you don't. Getting "the names of users over 25, sorted by age" shouldn't require memorizing .[] | select(.age > 25) | .name.

The same query as named steps

With the free Transmute CLI, a transformation is a list of steps with plain names:

$ npx github:mahope/transmute users.json --pipe '[
  {"op":"filter","expr":"item.age > 25"},
  {"op":"sort","by":"age"},
  {"op":"pick","fields":["name","age"]}
]'

Each step does one obvious thing:

StepWhat it does
filterKeep rows where an expression is true (item.age > 25)
mapTransform each row (item.price * 1.25)
sortOrder by a key, ascending or descending
uniqueDeduplicate by a key (or whole rows)
groupGroup rows by a key, with counts
pick / omitSelect or drop fields
renameRename columns via a mapping
head / tailFirst/last N rows
countRow count

When jq is still the right answer

Honest take: if your queries fit in the table above, named steps are easier to write, easier to read six months later, and easier to explain to a teammate. If they don't, learn jq properly — it pays off.

Chaining formats too

Steps compose freely with format conversion, so CSV in → filtered YAML out is one command, not three tools glued together in shell:

$ cat events.csv | npx github:mahope/transmute --pipe '[{"op":"unique","by":"user"},{"op":"head","n":10}]' --output yaml

Pipelines like this — without writing a script

The Transmute CLI is free (npx github:mahope/transmute). The desktop app adds an interactive pipeline builder, live preview and batch processing — one-time $19, no subscription.

Try the live demo →   See pricing