В Groovy я пытаюсь отфильтровать карту, по которой я специально хочу проверить, является ли любое вхождение cars.models.colors
пустым. Если это так, я хочу удалить этот конкретный элемент.
Например, я ожидаю удалить:
{
"name": "m5",
"colors": []
}
Код:
#!/usr/local/bin/groovy
import groovy.json.*
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText '''
{
"cars": [{
"name": "ford",
"models": [{
"name": "fiesta",
"colors": [
{ "colorName": "grey", "colorId": "123" },
{ "colorName": "white", "colorId": "844" },
{ "colorName": "green", "colorId": "901" }
]
}]
}, {
"name": "vw",
"models": [{
"name": "golf",
"colors": [{ "colorName": "black", "colorId": "392" }]
}]
}, {
"name": "bmw",
"models": [{
"name": "m5",
"colors": []
}]
}
]
}
'''
Map filtered = [:]
filtered['root'] = object.cars.models.colors.findAll {it.value.isEmpty()}
println JsonOutput.prettyPrint(JsonOutput.toJson(filtered))
Как только фильтрация будет успешно применена, я ожидаю, что JSON будет выглядеть, например,
{
"cars": [{
"name": "ford",
"models": [{
"name": "fiesta",
"colors": [{
"colorName": "grey",
"colorId": "123"
},
{
"colorName": "white",
"colorId": "844"
},
{
"colorName": "green",
"colorId": "901"
}
]
}]
},
{
"name": "vw",
"models": [{
"name": "golf",
"colors": [{
"colorName": "black",
"colorId": "392"
}]
}]
},
{
"name": "bmw",
"models": []
}
]
}
Однако мой код в настоящее время просто возвращает:
{
"root": [
[
]
]
}