RestAssured-比较两个JSON对象

时间:2018-09-24 04:28:45

标签: json rest-assured rest-assured-jsonpath

使用RestAssured,我正在尝试比较两个JSON对象。

示例: 第一个JSON来自excel,我将其读取为字符串并存储

String a = "Some JSON from Excel and I store it as a String";

第二个JSON是一个响应,它返回一个实际上是JSON的响应对象

Response expectedResponse = RestAssured.given().contentType("application/json").header(auth).get(endpoint).then().contentType("application/json").extract().response();

我想将这两个对象作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。

我尝试了将String转换为JSON的方法,但找不到任何方法。有人可以帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

如果字段顺序不确定,则建议您使用Hamcrest Matchers

您尚未发布回复,因此我只能举个例子

body(containsString("Hello World"));

或者您也可以尝试以下类似的方法

body("find { it.userId == '123' }.subject", containsInAnyOrder("MATHS", "SCIENCE"))

答案 1 :(得分:0)

您可以使用objectMapper来实现所需的功能,如果对象中的属性顺序不同,它不会失败,请查看以下示例:

    String s1 = "{ \"employee\": { \"id\": \"1212\", \"fullName\": \"John Miles\", 
    \"age\": 34 } }";
    String s2 = "{ \"employee\": { \"id\": \"1212\", \"age\": 34, \"fullName\": \"John 
    Miles\" } }";
    ObjectMapper mapper = new ObjectMapper();
    JsonNode s1Json = mapper.readTree(s1);
    JsonNode s2Json = mapper.readTree(s2);
    System.out.println(s1Json.equals(s2Json));