因此,输入
{
"id": 1,
"tags": [
{
"Key": "Name",
"Value": "I am id 1"
},
{
"Key": "Else",
"Value": "Random"
}
]
}
{
"id": 2,
"tags": null
}
我想获取id
和name
的值(如果存在)。因此,对于该输入,我想获得以下输出。
{
"id": 1,
"name": "I am id 1"
}
{
"id": 2,
"name": null
}
我尝试做:
jq '{"id": .id, "name": .tags[]|select(.Key=="Name").Value}'
但是尽管它在存在该键时提取,但在路径不存在时它无法提供null
或默认值。
关于如何解决此问题的任何想法?
您可以在以下jqplay上试用:https://jqplay.org/s/GgXZg67o79
答案 0 :(得分:1)
{id, name: (.tags | if . then from_entries.Name else . end )}
或者如果您有足够新的jq版本(1.6后),则可以省略else .
:
{id, name: (.tags | if . then from_entries.Name end )}
{id, name: (.tags // {} | .[] | select(.Key=="Name").Value // null)}
另请参阅下面的评论。