データリストに数千のテストキットエントリがあるとしましょう。
[
{
"id": "abcde1",
"data": {
"type": "COVID19",
"date": "2020-04-15"
}
},
{
"id": "hijkl1",
"data": {
"type": "COVID20",
"date": "2020-04-02"
}
},
{
"id": "asdf1",
"data": {
"type": "COVID19",
"date": "2020-04-16"
}
},
{
"id": "jkl1",
"data": {
"type": "COVID20",
"date": "2020-04-16"
}
}
]
各エントリは、任意の「タイプ」にすることができます。「COVID19」だけでフィルタリングし、「id」を出力したい:
COVID19 asdf1
COVID19 abcde1
JQは、私にとって「COVID19」であるエントリを簡単にフィルタリングできます。
cat dat.json |jq -r '.[].data |select(.type == "COVID19")'
しかし、ドリルダウンすると、.[].data
参照できなくなります.[].id
。
結果をフィルタリングした後、上位層のキー/値を参照するにはどうすればよいですか?絶対パスのようなルートオブジェクトへのショートカットはありますか?
JQでフィルターをかけた後、上位層の変数を参照するにはどうすればよいですか?
多くの方法があり、あなたの選択はおそらくあなたが考えている特定のクラスのタスクに依存するでしょう。
1つの手法は、関心のあるアイテムをjq変数に格納することです。たとえば、次の行に沿って格納します。
.[]
| .id as $id
| .data
| select(.type == "COVID19")
| [.type, $id]
| join(" ")
別の技術は、使用することですpaths
とgetpath
。
さらにもう1つは、を使用することtostream
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加