2017-03-07 59 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