Я могу получить JSON из службы, используя RESTAssured.
Я хотел бы использовать возможность JSONPath для извлечения JSON, а затем сравнить его с помощью JSONAssert.
Вот мой пример:
@Test
public void doAPITestExample() throws JSONException {
// retrieve JSON from service
Response response = RestAssured.given().get("http://localhost:8081/mockservice");
response.then().assertThat().statusCode(200);
String body = response.getBody().asString();
System.out.println("Body:" + body);
/*
{"datetime": "2018-06-21 17:48:07.488384", "data": [{"foo": "bar"}, {"test": "this is test data"}]}
*/
// able to compare entire body with JSONAssert, strict=false
Object data = response.then().extract().path("data");
System.out.println("Response data:");
System.out.println(data.getClass()); // class java.util.ArrayList
System.out.println(data.toString());
// JSONAssert data with strict=false
String expectedJSON = "{\"data\":[{\"foo\": \"bar\"}, {\"test\": \"this is test data\"}]}";
JSONAssert.assertEquals(expectedJSON, response.getBody().asString(), false);
// How do I extract JSON with JSONPath, use JSONAssert together?
}
Подход 1 - использование JSONPath для получения JSONObject
Как мне заставить JSONPath вернуть JSONObject, который может использоваться JSONAssert?
В примере кода:
Object data = response.then().extract().path("data");
Возвращает java.util.ArrayList
. Как это можно использовать с JSONAssert для сравнения с ожидаемым JSON?
Подход 2 - анализировать извлеченные данные с помощью JSONParser
Если я сделаю data.toString()
, возвращается строка, которую невозможно проанализировать из-за отсутствия обработки кавычек для строковых значений с пробелами:
String dataString = response.then().extract().path("data").toString();
JSONArray dataArray = (JSONArray) JSONParser.parseJSON(dataString);
Результат:
org.json.JSONException: Unterminated object at character 24 of [{foo=bar}, {test=this is test data}]
Подход 3 - Использование проверки схемы JSON
Можно ли извлечь из JSON только свойство data
и запустить его для схемы JSON только в этой части?
Примечание: весь возвращаемый JSON довольно большой. Я просто хочу проверить свойство data
из него.
Какой пример выполнения проверки схемы JSON будет искать только свойство data
из JSON?
Спасибо;