jq:缺少JSON对象检测

时间:2015-10-04 08:21:29

标签: json jq

我的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

2 个答案:

答案 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"'