/ / jq con objetos anidados - json, objeto, anidado, jq

jq con objetos anidados - json, objeto, anidado, jq

Aquí está mi archivo JSON

{
"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": []
}
]
}
]
}

y mi salida tiene que ser:

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

Estoy tratando de lograrlo a través de jq, sin embargo, los valores nulos del evento lo hacen muy complejo e incapaz de lograr la salida como se indicó anteriormente. ¿Se puede hacer esto usando jq? Aquí está mi código:

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

Respuestas

1 para la respuesta № 1

Los requisitos no son muy claros en varios aspectos, pero lo siguiente es probablemente lo que tiene en mente. La salida, sin embargo, es JSON válida.

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

Con su aporte, esto produce:

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

Es posible que desee obtener la subcadena de interés de alguna otra manera, por ejemplo:

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

o:

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