我的JSON数据:
{
"Tags": [
{ "Key": "Team", "Value": "AA" },
{ "Key": "Division", "Value": "BB" },
{ "Key": "Name", "Value": "CC" }
]
}
我想显示Name的值(上例中的“CC”)。 如果缺少此值,则应显示“N / A”。 我正在寻找的是纯jq替换这个jq和bash混合:
a=$( cat json | jq -r '.Tags[] | select( .Key=="Name" ) | .Value' );
if [ -z $a ]; then a="N/A"; fi
echo $a
答案 0 :(得分:2)
以下是David Tolnay的完美解决方案:
https://github.com/stedolan/jq/issues/976
在此引用它:
试试这个:
jq -r '.Tags | from_entries | .Name // "N/A"'
这会使用from_entries将键/值对列表转换为地图,然后在地图中选择“名称”。然后,如果名称不在地图中,它使用“替代运算符”//生成“N / A”。
这需要jq 1.5才能理解from_entries中的大写“Key”和“Value”。如果您遇到jq 1.4或更早版本,则需要将它们显式转换为小写:
jq -r '.Tags | map({key:.Key, value:.Value}) | from_entries | .Name // "N/A"'
答案 1 :(得分:0)
使用替代运算符//
。
jq -r '.Tags[] | select(.Key == "Name") | .Value // "N/A"'