我能够使用RESTAssured从服务检索JSON。
我想使用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?
}
如何获取JSONPath以返回可被JSONAssert使用的JSONObject?
在代码示例中:
Object data = response.then().extract().path("data");
这将返回一个java.util.ArrayList
。该如何与JSONAssert一起使用以与预期的JSON进行比较?
如果我执行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}]
是否可以仅从JSON中提取data
属性,然后在那部分针对JSON Schema运行该属性?
注意:返回的整个JSON很大。我只想从中验证data
属性。
仅通过JSON中的data
属性,进行JSON模式验证的示例会如何?
谢谢;
答案 0 :(得分:0)
您可以在响应对象中使用方法jsonPath。
示例:
// this will return bar as per your example response.
String foo = response.jsonPath ().getString ("data[0].foo");
有关JSon路径检查here的更多信息。