JsonPath expression involving two root values

269 views Asked by At

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"
            }
        }
    ]
}
1

There are 1 answers

4
gregsdennis On BEST ANSWER

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.