2015-10-15 5 views
1

У меня есть JSON, который выглядит следующим образом:денормализации JSON с JQ

[ 
     { 
     "fields": { 
      "versions": [ 
      { 
       "id": "36143", 
       "name": "ST card" 
      }, 
      { 
       "id": "36144", 
       "description": "Acceptance test card", 
       "name": "AT card" 
      } 
      ], 
      "severity": { 
      "value": "B-Serious", 
      "id": "14231" 
      } 
     } 
     }, 
     { 
     "fields": { 
      "versions": [ 
      { 
       "id": "36145", 
       "name": "ST card" 
      } 
      ], 
      "severity": { 
      "value": "C-Limited", 
      "id": "14235" 
      } 
     } 
     } 
    ] 

Я хочу, чтобы преобразовать его с JQ на это:

[ 
     { 
     "id": "36143", 
     "name": "ST card" 
     "value": "B-Serious" 
     }, 
     { 
     "id": "36144", 
     "name": "AT card" 
     "value": "B-Serious" 
     }, 
     { 
     "id": "36145", 
     "name": "ST card" 
     "value": "C-Limited" 
     } 
    ] 

Обратите внимание, что первый объект имеет 2 версии, и такой же серьезности. Я пробовал функции group_by и map jq, но не был слишком успешным. Пожалуйста, помогите :)

ответ

3

Это должно сработать. Вы не хотели бы использовать здесь group_by, вы бы сделали это, если бы вы пытались перейти от большего к меньшему, мы идем в другую сторону.

Вы комбинируете различные версии с соответствующей строгостью. Вот как вы могли это сделать.

map(.fields | (.versions[] | { id, name }) + { value: .severity.value }) 
+1

Прекрасное изящное решение. Спасибо за быстрый ответ –