def parsed = new JsonSlurper().parseText(json)
assert parsed.status.group == 'group1'
assert parsed.status.partitions.find { it.topic == 'topic1' && it.partition ==
0 }?.end?.lag == 0
Putting your JSON into a string variable “json”, the above asserts pass. The
group was not put into a find because the status field is an object, not an
array, so you’d check it with a normal if statement rather than find. The
result is the end.lag field of the first partition found matching the topic and
partition number, or null if no partition was found, or the first partition
found does not have the field, or if the field exists but is null.
If you want to limit only to partitions with lag defined, you can change the
search accordingly:
assert parsed.status.partitions.find { it.topic == 'topic1' && it.partition ==
0 && it.end?.lag != null }?.end?.lag == 0
Jason
From: Brandon Metcalf <[email protected]>
Sent: Tuesday, November 27, 2018 12:20 PM
To: [email protected]
Subject: finding value of key at same level as another key
Hello,
I have the following json
{
"status": {
"group": "group1",
"partitions": [
{
"topic": "topic1",
"partition": 0,
"start": {
"offset": 0,
"timestamp": 1543337772415,
"lag": 0,
"max_offset": 0
},
"end": {
"offset": 0,
"timestamp": 1543337812000,
"lag": 0,
"max_offset": 0
}
}
]
}
}
I'm looking for a way in groovy to find the value of status.partitions.end.lag
when I know the values of status.group, status.partitions.topic and
status.partitions.partition? I may need to rethink my approach to how I think
I should parse this json, but hopefully there is an easy way to do this.
Also, there can be multiple levels of the values that I know. Just showing one
for simplicity.
Thanks.