JQ嵌套对象
问题描述:
这里是我的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] + "}]")
答
的要求是不是在几个方面很清楚,但大概就是下面的接近你的想法是什么。然而,输出是有效的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
显示您尝试过并没有工作的内容将会有所帮助。 – BogdanC
就我个人而言,我发现jq对于超级简单查询来说非常棒。任何更复杂的东西,我只是用lodash创建一个小的JavaScript文件来做操作。我不喜欢生活在足以应付所有问题的外壳中。 – aaaaaa