2016-05-23 4 views
0

У меня есть сгенерированный файл (из amazon CLI) и вытаскиваем некоторые атрибуты. Обычно это было бы просто с JQ, однако файл JSON не имеет атрибутов верхнего уровня.Извлечение объектов с помощью JQ для вложенного json-файла без именованных атрибутов

[ 
    [ 
     { 
      "State": "running", 
      "Type": "c4.xlarge", 
      "ID": "i-somehere", 
      "Env": [ 
       "prd" 
      ], 
      "Name": [ 
       "some url here" 
      ] 
     } 
    ], 
    [ 
     { 
      "State": "stopped", 
      "Type": "c4.xlarge", 
      "ID": "i-somehere", 
      "Env": [ 
       "prd" 
      ], 
      "Name": [ 
       "some url here" 
      ] 
     } 
    ], 
[ 
     { 
      "State": "running", 
      "Type": "c4.2xlarge", 
      "ID": "i-somehere", 
      "Env": [ 
       "prd" 
      ], 
      "Name": [ 
       "some url here" 
      ] 
     } 
    ] 
] 

..... Я хотел бы извлечь состояние, Env и имя .... это должно быть просто JQ «[]. Государство» ... однако государство вложено в объекте который не назван. Как я могу извлечь с помощью JQ?

ответ

0

Если это просто массивы массивов объектов, которые вас интересуют, вы можете сгладить их до объектов, пройдя каждый из массивов. Затем получите нужные свойства.

.[][] | { State, Env, Name } 
0

Если вы хотите, три атрибута для всех объектов, которые имеют какие-либо из них, независимо от того, где происходят объекты, вы можете использовать ... Например, для данного входа,

jq '.. | objects | select(has("State") or has("Env") or has("Name")) | {State, Env, Name}' 

производит:

{ 
    "State": "running", 
    "Env": [ 
    "prd" 
    ], 
    "Name": [ 
    "some url here" 
    ] 
} 
{ 
    "State": "stopped", 
    "Env": [ 
    "prd" 
    ], 
    "Name": [ 
    "some url here" 
    ] 
} 
{ 
    "State": "running", 
    "Env": [ 
    "prd" 
    ], 
    "Name": [ 
    "some url here" 
    ] 
} 
+0

Thankyou. Это отлично работает независимо от того, где узел находится в иерархии. – user1351155

Смежные вопросы