REST-Assured - JsonPath to get a list of values

I am using REST-Assured to test some RESTful web services. Here is my JSON:

{
    "status":true,
    "responseData":{
        "orderLevelReasons":[
            {
                "reasons":[
                    {
                        "reasonId":"129cfea8-b022-4dc8-9811-222a324f46aa",
                        "reasonName":"COD Amount Mismatch"
                    },
                    {
                        "reasonId":"a881fd5c-626e-438c-8026-646aa2a19098",
                        "reasonName":"Gave wrong information"
                    },
                    {
                        "reasonId":"543d438a-88cc-487c-86e4-19eecefa9ca7",
                        "reasonName":"Late delivery"
                    },
                    {
                        "reasonId":"080cd7c1-7a37-48ad-9090-57286d93ea41",
                        "reasonName":"Parcel not received"
                    },
                    {
                        "reasonId":"5ca3d9b4-0fa2-49da-a534-a6f2e7eccc07",
                        "reasonName":"Staff did not inform about the parcel arrival"
                    }
                ],
                "issueName":"ISSUE TYPE 1",
                "issueId":"0c2c37a6-62b6-4c28-ab6c-566487d045bd",
                "hint":""
            },
            {
                "reasons":[
                    {
                        "reasonId":"129cfea8-b022-4dc8-9811-222a324f46aa",
                        "reasonName":"COD Amount Mismatch"
                    },
                    {
                        "reasonId":"14975b5d-23fb-4735-8082-2e02d6335788",
                        "reasonName":"Data issue"
                    },
                    {
                        "reasonId":"7e6e8446-3774-4589-9171-8e7ab0a7f73b",
                        "reasonName":"Delivery BOY did not inform before delivering"
                    },
                    {
                        "reasonId":"543d438a-88cc-487c-86e4-19eecefa9ca7",
                        "reasonName":"Late delivery"
                    },
                    {
                        "reasonId":"080cd7c1-7a37-48ad-9090-57286d93ea41",
                        "reasonName":"Parcel not received"
                    },
                    {
                        "reasonId":"8e430c71-f28b-49e4-9946-e0bd5131768b",
                        "reasonName":"Refuse to come doorstep"
                    },
                    {
                        "reasonId":"515d0fa4-a44c-47eb-a7a2-5ddae778f37a",
                        "reasonName":"Extra Amount taken By Partner Staff"
                    }
                ],
                "issueName":"ISSUE TYPE 2",
                "issueId":"ac902377-3db2-462a-8e53-48b06d1aff1f",
                "hint":""
            }
        ],
        "productLevelReasons":[
            {
                "reasons":[
                    {
                        "reasonId":"6129dcb8-1ae5-4d7d-9c95-4c0ec2f69ded",
                        "reasonName":"Some reason1"
                    },
                    {
                        "reasonId":"febec32b-b243-4509-b46a-20d9f4747ca3",
                        "reasonName":"Some reason2"
                    },
                    {
                        "reasonId":"d8a492b8-f816-41e6-b45d-5ec29f3a0785",
                        "reasonName":"Some reason3"
                    },
                    {
                        "reasonId":"c0c98489-6401-455a-9145-f52664d8aff4",
                        "reasonName":"Some reason4"
                    },
                    {
                        "reasonId":"ef2b4147-ee76-4961-b784-63e848a84167",
                        "reasonName":"Some reason5"
                    },
                    {
                        "reasonId":"7f4f9657-17b2-407b-aed7-16b221bf3229",
                        "reasonName":"Some reason6"
                    },
                    {
                        "reasonId":"2aa83be6-60cb-43dc-9273-c41e6047315e",
                        "reasonName":"Others"
                    },
                    {
                        "reasonId":"c432f563-f835-4710-8055-5ee9e0fe1409",
                        "reasonName":"Some reason7"
                    }
                ],
                "orderItemName":"Item1",
                "orderItemId":961253,
                "hint":""
            }
        ]
    },
    "message":"OK"
}

      

I would like to receive:

  • List of all values reasonId

    in responseData.orderLevelReasons

    .
  • List of all values reasonId

    under responseData.productLevelReasons

    , where orderItemId

    961253

    (as there may be productLevelReasons for multiple orderItemIds

    ).

I searched a lot for this and found that it could be achieved with JsonPath

, but I couldn't figure out exactly which JsonPath expressions for each of my goals.

+3


source to share


1 answer


List of all reasonId values ​​in responseData.orderLevelReasons

$.responseData.orderLevelReasons[*].reasons[*].reasonId

      

[*] for orderLevelReasons is required if you need reasons from all elements of the orderLevelReasons collection. If not, you can replace it with [0] and you can get a separate list (while repeating the same reasons for each orderLevelReasons).

List of all reasonId values ​​in responseData.productLevelReasons file where orderItemId is 961253 (as there might be productLevelReasons for multiple orderItemIds).

$.responseData.productLevelReasons[?(@.orderItemId=='961253')].reasons[*].reasonId

      

It is also no different. You will need to remove duplicates if there are duplicate reasons.



I've checked both JsonPath expressions at jsonpath.curiousconcept.com, both are valid. But the Java code gives an error for some reason.

I looked into this. The robust framework doesn't actually implement JsonPath, but the JSON request syntax based on a proprietary path. Unfortunately, the name is the same, but in fact it is based on a completely different standard.

This docs page explains:

Note that the JsonPath implementation uses Groovy GPath syntax and should not be confused with the Jayway JsonPath implementation.

The JsonPath tag on StackOverflow is related to the accepted JsonPath specification, not the guarantee of the rest of the information.

Based on my research, I would conclude that the persistence-guaranteed jsonpath implementation does not support your requirements. You should use an implementation that does Jayway one for example .

+4


source







All Articles