【发布时间】:2019-12-21 07:51:59
【问题描述】:
我想比较两个 json 响应。我试图将 JSON 响应存储在 pojo 中,然后通过覆盖 equals 方法进行比较,但我的 pojo 非常大,包含 10 个类。有没有其他方法比较
【问题讨论】:
-
您可以使用 Jackson 来比较 2 JSON ,请参阅this
标签: java json api automation rest-assured
我想比较两个 json 响应。我试图将 JSON 响应存储在 pojo 中,然后通过覆盖 equals 方法进行比较,但我的 pojo 非常大,包含 10 个类。有没有其他方法比较
【问题讨论】:
标签: java json api automation rest-assured
你可以试试下面的代码 sn-p:
import org.codehaus.jettison.json.JSONObject;
import org.junit.Assert;
import io.restassured.RestAssured;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.filter.cookie.CookieFilter;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
检索 JSON 响应:
Response jsonResponseOne = RestAssured.given().spec(requestSpecification).filter(cookieFilter).relaxedHTTPSValidation().when().///.then().assertThat().extract().response();
Response jsonResponseTwo = RestAssured.given().spec(requestSpecification).filter(cookieFilter).relaxedHTTPSValidation().when().///.then().assertThat().extract().response();
将两个 JSON 响应提取为字符串:
JSONObject jsonOne = new JSONObject(jsonResponseOne.getBody().asString())
JSONobject jsonTwo = new JSONObject(jsonResponseTwp.getBody().asString())
使用 Java 比较响应:
Assert.assertEquals(jsonOne, jsonTwo);
【讨论】:
如果您需要它们之间的差异,请尝试使用zjsonpatch库来检测两个json响应之间的差异。
示例代码:
JsonNode json1= jacksonObjectMapper.readTree(jsonString1);
JsonNode json2= jacksonObjectMapper.readTree(jsonString2);
JsonNode patchNode = JsonDiff.asJson(json1, json2);
String diffs = patchNode.toString();
【讨论】: