JQ:显示单元素数组的内容/值

时间:2015-07-16 19:17:34

标签: json jq

我的JSON文件:

{
    "MetricAlarms": [
        {
            "EvaluationPeriods": 2,
            "AlarmActions": [
                "this is causing me trouble"
            ],
            "Threshold": 0.0,
            "Dimensions": [
                {
                    "Name": "DBInstanceIdentifier",
                    "Value": "db-master02"
                }
            ],
            "MetricName": "ReplicaLag"
        }
    ]
}

我当前用于压缩JSON文件的命令(jq 1.3,现在无法升级):

cat $JSON_FILE |
   jq -r '.MetricAlarms[] |
          { MetricName,
            Threshold,
            EvaluationPeriods,
            AlarmActions
          } +
          ( .Dimensions[] | { DimName: .Name, DimValue: .Value } )
   '

产生

{
  "DimName": "DBInstanceIdentifier",
  "DimValue": "db-master02",
  "AlarmActions": [
    "this is causing me trouble"
  ],
  "EvaluationPeriods": 2,
  "Threshold": 0,
  "MetricName": "ReplicaLag"
}

我真正想要的是什么:

{
  "DimName": "DBInstanceIdentifier",
  "DimValue": "db-master02",
  "AlarmActions": "this is causing me trouble",
  "EvaluationPeriods": 2,
  "Threshold": 0,
  "MetricName": "ReplicaLag"
}

我想显示没有数组的“AlarmActions”的值。

这似乎是一个简单的问题,但答案不包括在内。我试过以类似于我对待“尺寸”的方式处理“AlarmActions”。我已经尝试了我能想到的[],[0],句号,管道和函数调用的每个变体,但无济于事。我错过了什么?

1 个答案:

答案 0 :(得分:2)

使用:

cat $JSON_FILE |
jq -r '.MetricAlarms[] |
      { MetricName,
        Threshold,
        EvaluationPeriods,
        "AlarmActions" : .AlarmActions[0]
      } +
      ( .Dimensions[] | { DimName: .Name, DimValue: .Value } )
'

即。不要使用AlarmActions元素的快捷语法。