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 <bwmetc...@gmail.com> Sent: Tuesday, November 27, 2018 12:20 PM To: users@groovy.apache.org 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.