jq 过滤子对象值

jq Filter on sub object value

我有一个 json 文件 people.json:

{
  "Joe" : {"Job" : "Clown", "Age" : 22},
  "Sally" : {"Job" : "Programmer", "Age" : 32},
  "Anne" : {"Job" : "Clown", "Age" : 29}
}

我想select每个人都是小丑。我的输出应该是这样的:

{
  "Joe" : {"Job" : "Clown", "Age" : 22},
  "Anne" : {"Job" : "Clown", "Age" : 29}
}

我试过

中的 .. 运算符
cat people.json | jq '. | map(select(.Job == "Clown"))'

但它似乎在多个层面上与乔和安妮相匹配,并且产生了比我想要的更多的输出。有任何想法吗?谢谢

使用 with_entries 转换 to/from 一种中间格式,将数据表示为具有 keyvalue 元素的对象数组:

cat people.json | jq 'with_entries(select(.value.Job == "Clown"))'

根据此处的文档:http://stedolan.github.io/jq/manual/

这是一个使用 reduce

的解决方案
  . as $v
| reduce keys[] as $k (
    {};
    if $v[$k].Job == "Clown" then .[$k] = $v[$k] else . end
  )