Учитывая следующее JSON,
Я пытаюсь отфильтровать элементы в массиве машин, где массив комментариев элемента равен нулю:
.cars[] | select(.comments == null)
или массив комментариев элемента существует, и ни один из объектов комментариев не содержит значения "FooBar"
.cars[] | select( select(.comments != null) | (any(.comments[]; index("FooBar")) | not) )
при сохранении исходной структуры.
С помощью jq я могу понять, как создать желаемые критерии отфильтровать, но то, что я не могу обернуть вокруг себя, это как применить это к элементам верхнего уровня.
JSON input:
{
"person": {
"first_name": "Bob",
"last_name": "Smith"
},
"addresses": [
{
"home": {
"line1": "123",
"line2": "A st."
}
},
{
"work": {
"line1": "456",
"line2": "B st."
}
}
],
"cars": [
{
"make": "Honda",
"model": "Civic"
},
{
"make": "Honda",
"model": "Accord"
},
{
"make": "Honda",
"model": "Pilot",
"comments": [
"Comment 1",
"Comment 2",
"FooBar"
]
},
{
"make": "Honda",
"model": "Passport",
"comments": [
"Comment 3",
"Comment 4"
]
}
]
}
JSON Outut То же, что и входные данные, но отфильтрован объект с массивом комментариев, содержащий значение «FooBar»:
{
"person": {
"first_name": "Bob",
"last_name": "Smith"
},
"addresses": [
{
"home": {
"line1": "123",
"line2": "A st."
}
},
{
"work": {
"line1": "456",
"line2": "B st."
}
}
],
"cars": [
{
"make": "Honda",
"model": "Civic"
},
{
"make": "Honda",
"model": "Accord"
},
{
"make": "Honda",
"model": "Passport",
"comments": [
"Comment 3",
"Comment 4"
]
}
]
}