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"))'

しかし、複数のレベルで Joe と Anne に一致しているようで、必要以上の出力を生成します。何か案は?ありがとう。

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 に答える