これが私のテストデータです:
[
{
"id": "id-1",
"tags": {
"key": "name",
"value": "name-1"
}
},
{
"id": "id-2"
}
]
出力を簡素化し、存在する場合は「名前」フィールドを表示し、常に ID を表示しようとしています。たとえば、次のスクリプトはほとんど機能します。
~ $ cat testdata | jq '.[] | {id, name: .tags.value}'
{
"id": "id-1",
"name": "name-1"
}
{
"id": "id-2",
"name": null
}
存在しない .keys に対するガードを追加し、気になる「キー」のセクションをフィルタリングしようとすると、次のようになります。
~ $ cat testdata | jq '.[] | {id, name: (select(.tags.key == "name") | .tags.value)}'
{
"id": "id-1",
"name": "name-1"
}
{} は、どういうわけか「null」ではなく長さゼロの配列になってしまうと思います。| の代わりに何を使用すればよいですか? 私は何を誤解していますか?