'JsonPath expression involving two root values
I have following JSON, I need to get the personEmailContact which has a matching emailID with emailupdaterequest.emailContact. I tried to write the expression like $.responsebody[?(@.personEmailContact.emailId ==$.emailupdaterequest.emailContact.emailId)] but this does not seem to work, I need to write an expression which can work without substitution. Can anyone help with any pointers
{
"emailupdaterequest": {
"emailContact": {
"emailId": "[email protected]",
"contactName": "ADMIN EMAIL"
}
},
"responsebody": [
{
"personEmailContact": {
"emailId": "[email protected]",
"contactTypeCode": "P",
"contactName": "Joe"
}
},
{
"personEmailContact": {
"emailId": "[email protected]",
"contactTypeCode": "P",
"contactName": "john"
}
}
]
}
Solution 1:[1]
You should be able to use the root selector $ inside an expression. This will allow you to compare values inside an array element to values elsewhere within the JSON:
$.responsebody[?(@.personEmailContact.emailId == $.emailupdaterequest.emailContact.emailId)]
Note the $.emailupdaterequest.emailContact.emailId.
$ indicates the path is evaluated from the root of the JSON, whereas @ indicates that the path is evaluated from the current item as the processor iterates over the array.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | gregsdennis |
