2017-08-13 217 views
0

這裏是我的JSON文件JQ嵌套對象

{ 
"variables": [], 
"item":[ 
{ 
    "name": "Joe", 
    "item": [ 
    { 
     "name1": "item1", 
     "request": {}, 
     "response": [] 
    }, 
    { 
     "name1": "item2", 
     "request": {}, 
     "response": [] 
    } 
    ] 
}, 
{ 
    "name": "Jim", 
    "item": [ 
    { 
     "name1": "item3", 
     "event": [ 
     { 
      "listen": "test", 
      "script": { 
      "type": "text/javascript", 
      "exec": [ 
       "//code=gst-70" 
      ] 
      } 
     } 
     ], 
     "request": {}, 
     "response": [] 
    }, 
    { 
     "name1": "item4", 
     "event": [ 
     { 
      "listen": "test", 
      "script": { 
      "type": "text/javascript", 
      "exec": [ 
       "//code=gst-50" 
      ] 
      } 
     } 
     ],  
     "request": {}, 
     "response": [] 
    } 
    ] 
} 
] 
} 

和我的輸出必須是:

[{"name":"Joe _ item1","code": }] 
[{"name":"Joe _ item2","code": }] 
[{"name":"Jim _ item3","code":gst-70}] 
[{"name":"Jim _ item4","code":gst-50}] 

我試圖通過JQ實現它,但是空事件值使它非常複雜並且無法達到上述輸出。這可以使用jq完成嗎? 這裏是我的代碼:

.item[] 
| ("[{\"name\":\"" + .name + " _ " + .item[].name1+",\"code\":") , 
    (.item[]?.event[]?.script.exec[0] + "}]") 
+0

顯示您嘗試過並沒有工作的內容將會有所幫助。 – BogdanC

+0

就我個人而言,我發現jq對於超級簡單查詢來說非常棒。任何更復雜的東西,我只是用lodash創建一個小的JavaScript文件來做操作。我不喜歡生活在足以應付所有問題的外殼中。 – aaaaaa

回答

1

的要求是不是在幾個方面很清楚,但大概就是下面的接近你的想法是什麼。然而,輸出是有效的JSON。

.item[] 
| .name as $name 
| .item[] 
| {name: "\($name) _ \(.name1)", 
    code: (if .event then .event[].script.exec[0]|split("=")[1] 
      else null end) } 

隨着你的輸入,這將產生:

{"name":"Joe _ item1","code":null} 
{"name":"Joe _ item2","code":null} 
{"name":"Jim _ item3","code":"gst-70"} 
{"name":"Jim _ item4","code":"gst-50"} 

您可能希望獲得感興趣的子串在一些其他的方式,如:

.[1+index("="):] 

或:

sub("^[^=]*="; "") 
+0

謝謝,它幫助。 – Ria