2015-07-16 3 views
2

Мой JSON файл:JQ: Показать содержимое/значение массива одноэлементной

{ 
    "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» таким же образом, как и «Dimensions». Я пробовал каждый вариант [], [0], периодов, труб и вызовов функций, о которых я могу думать, но безрезультатно. Что мне не хватает?

ответ

3

Использование:

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

т.е. не использовать синтаксис ярлыка для AlarmActions элемента.

+0

Спасибо, Ханс. Это идеально. – jago