I have following json text and my goal is to find if any of the "direct" field has value 'false' for meta.name="name1"
I can parse and get list for "name1" but not sure how to go further.. like collect values of field "direct" != true and check if collection is more than 0.
def list = new groovy.json.JsonSlurper().parseText(text )
println list.record.land.find{ it.meta.name == 'name1' }
{
"version": 1,
"record": {
"land": [
{
"meta": {
"name": "name1",
"type": "person"
},
"delete": {
"result": "allow",
"factor": {
"direct": true,
"rules": [
{
"rule1": "1002",
"uri": "/deeds/567576-ffgt-1002"
},
{
"rule1": "5012",
"uri": "/deeds/567576-dfge-5012"
}
]
}
},
"transfer": {
"result": "allow",
"factor": {
"direct": true,
"rules": [
{
"rule1": "1002",
"uri": "/deeds/567576-ffgt-1002"
},
{
"rule1": "5012",
"uri": "/deeds/567576-dfge-5012"
}
]
}
},
"move": {
"result": "allow",
"factor": {
"direct": false,
"rules": [
{
"rule1": "1002",
"uri": "/deeds/567576-ffgt-1002"
},
{
"rule1": "5012",
"uri": "/deeds/567576-dfge-5012"
}
]
}
}
}
]
}
}
In first step you can filter json to find all objects with specifi name:
def filtered = list.record.land.findAll{ it.meta.name == 'name1'}
Then you could something like this:
def directIsFalse = ['delete', 'transfer', 'move'].any{
filtered[it].factor.direct[0] == false;
}
This would return true if in at least one section ("delete", "transfer" or "move") field direct will be equal to false
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.