2017-03-07 30 views
2

我有這下面的JSON文件,我需要使用JQ捕獲,但到目前爲止,我只能捕獲父參數(SUBSCRIBER_ID),但無法捕獲子參數「提供」。如何使用JQ從JSON父和子父參數捕獲值?

需要你們幫忙提供一個正確的JQ過濾器來捕獲「SUBSCRIBER_ID」和「Offer」值。

JSON

{"Data1": [ 
    {"Data2": { 
      "SUBSCRIBER_ID" : "999050280010099", 
      "MSISDN" : "999050280010099", 
      "EMAIL" : "[email protected]", 
      "OFFERS" : [ 
        { 
         "Offer" : 12344, 
         "EffectiveDate" : "1488787236", 
         "ExpiryDate" : "4070869200" 
        }    ], 
      "IsGroup" : "false", 
    }} 
]} 

我的JQ過濾器不工作

'.Data1 | .[] | .Data2 | to_entries | map(.value) | @csv' -r 

預期輸出:

SUBSCRIBER_ID,Offer 
999050280010099,12344 

回答

1

你可以試試這個jq

jq -r '.Data1|.[]|.Data2|[.SUBSCRIBER_ID, .OFFERS[].Offer]|@csv' file > out.csv 

(OR)如所建議的通過@peak,

jq -r '.Data1[].Data2|[.SUBSCRIBER_ID, .OFFERS[].Offer]|@csv' file 

另一種方法:

jq -r '.[]|.[]|map([.SUBSCRIBER_ID, .OFFERS[].Offer])|.[]|@csv' file 

輸入:

$ cat file.json 
{ 
    "Data1": [ 
    { 
     "Data2": { 
     "SUBSCRIBER_ID": "999050280010099", 
     "MSISDN": "999050280010099", 
     "EMAIL": "[email protected]", 
     "OFFERS": [ 
      { 
      "Offer": 12344, 
      "EffectiveDate": "1488787236", 
      "ExpiryDate": "4070869200" 
      } 
     ], 
     "IsGroup": "false" 
     } 
    } 
    ] 
} 

測試:

$ jq -r '.Data1|.[]|.Data2|[.SUBSCRIBER_ID, .OFFERS[].Offer]|@csv' file.json 
"999050280010099",12344 

$ jq -r '.[]|.[]|map([.SUBSCRIBER_ID, .OFFERS[].Offer])|.[]|@csv' file.json 
"999050280010099",12344 
+0

注意'.Data1 | [] | .Data2'可以縮短爲:'.Data1 [] Data2',這可能對眼睛更容易。 – peak

+0

@peak,好的。更新。 – sat

+0

謝謝....這項工作完美。再次感謝週六。 – Maisa