Search code examples
bddkarate

Use If condition in Karate to extract values


I have the following JSON response -

    {
        "type": "StudentSchema",
        "version": 1,
        "students": [
            {
                id: 1,
                name: "John",
                roll: "1234"
            },
            {
                id: 2,
                name: "David",
                roll: "4434"
            }
        ]
}

Then how can I extract the array in Karate with name John to do further validation? e.g. I want to say if name == John then save the id

I am trying below but it does not seem to work -

* def userId =  get[0] response $[?(@students.name == 'John')].id
* match userId == 2

Solution

  • Let say your JSON is

    MyJson =  {
        "type": "StudentSchema",
        "version": 1,
        "students": [
            {
                id: 1,
                name: "John",
                roll: "1234"
            },
            {
                id: 2,
                name: "David",
                roll: "4434"
            }
        ]
    }
    

    Now as you want to get the ID for the student whose name is john you can get it by using JSON path

    * def JSONpath = '$..students[?(@.name=='John')].id'
    * def userId = karate.jsonPath(MyJson,JSONpath)
    

    It will give you an array of ID which satisfy the json path condition and you can do your assertion from that.