2015-10-15 99 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個版本,和同樣嚴重。我已經嘗試過jq的group_by和map函數,但並沒有太成功。請幫助:)

回答

3

這應該工作。你不想在這裏使用group_by,如果你試圖從更多到更少,我們會以另一種方式去做。

您正在將不同版本與相應的嚴重程度相結合。以下是你如何做到這一點。

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

可愛的優雅的解決方案。感謝您及時的回覆 –