14

我有一个 json 文件 people.json:

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

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

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

我已经尝试过 .. 运算符,如

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

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

4

2 回答 2

25

用于with_entries转换为/从中间格式转换,该格式将数据表示为具有keyvalue元素的对象数组:

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

根据这里的文档:http: //stedolan.github.io/jq/manual/

于 2015-02-19T21:35:00.800 回答
2

这是使用reduce的解决方案

  . as $v
| reduce keys[] as $k (
    {};
    if $v[$k].Job == "Clown" then .[$k] = $v[$k] else . end
  )
于 2017-08-03T17:34:56.730 回答