Search code examples
rest-assuredrest-assured-jsonpath

Extract REST API request json value to variable in RestAssured


We have to validate the value sent in our REST API request payload with Response value, Tried the below and was able to get the JSON array printed. How to get the specific object inside the array of the request JSON body.

Request Payload :

{
 "Testinfo":{
  "abc":2,
  "xyz":"2020-01-01"
 },
 "Details":{
      "eductation":{
          "test1":9,
          "test2":100,
          "test3":50
      },
      "neweductiona":{
          "test1":"value",
          "test2":"Draws"
      }
 }
}

Code :

jsonObject = (JSONObject) JSONValue.parse(request);
JSONObject Testinfo =    (JSONObject) jsonObject.get("Testinfo");
JSONObject Details =     (JSONObject) jsonObject.get("Details");

System.err.println("Testinfo value in the request is: " + Testinfo);
System.err.println("Details value in the request is: " + Details);

Output :

{
  "abc":2,
  "xyz":"2020-01-01"


 },

{
  "eductation":{
      "test1":9,
      "test2":100,
      "test3":50
  },
  "neweductiona":{
      "test1":"value",
      "test2":"Draws",

  }

How to get specific value such as "Details.eductation.test3"

Tried below

JSONArray jsonArray = (JSONArray) JSONValue.parse(request)

but getting an error as :

java.lang.ClassCastException: net.minidev.json.JSONObject cannot be cast to net.minidev.json.JSONArray

Please guide.


Solution

  • Use JSONPath

    String json = "{\r\n" + "   \"Testinfo\": {\r\n" + "        \"abc\": 2,\r\n"
                    + "     \"xyz\": \"2020-01-01\"\r\n" + "\r\n" + "\r\n" + "  },\r\n" + "\r\n" + "    \"Details\": {\r\n"
                    + "     \"eductation\": {\r\n" + "          \"test1\": 9,\r\n" + "          \"test2\": 100,\r\n"
                    + "         \"test3\": 50\r\n" + "      },\r\n" + "     \"neweductiona\": {\r\n"
                    + "         \"test1\": \"value\",\r\n" + "          \"test2\": \"Draws\",\r\n"
                    + "         \"test3\": 50\r\n" + "\r\n" + "     }\r\n" + "  }\r\n" + "}";
    
            JsonPath js = new JsonPath(json);
    
            System.out.println("Value is : "+js.getString("Details.eductation.test3"));
    

    Output :

    Value is : 50