Java 请放心-比较两个JSON对象

Java 请放心-比较两个JSON对象,java,rest-assured,web-api-testing,Java,Rest Assured,Web Api Testing,假设GET请求返回一些JSON对象: { "a": 1, "b": 2, "c": 3, "date": "current_date" } 我手上有一个类似的物体,我想检查一下,a键,b键,c键是否相同,忽略日期键 我该怎么做呢?您可以将其转换为Json对象并删除不需要的密钥。按照链接查看详细信息:您可以将其转换为Json对象并删除不需要的密钥。点击链接了解详细信息:我发现rest assur

假设GET请求返回一些JSON对象:

{
 "a": 1, "b": 2, "c": 3, "date": "current_date"
}
我手上有一个类似的物体,我想检查一下,a键,b键,c键是否相同,忽略日期键


我该怎么做呢?

您可以将其转换为Json对象并删除不需要的密钥。按照链接查看详细信息:

您可以将其转换为Json对象并删除不需要的密钥。点击链接了解详细信息:

我发现rest assured有一些有趣的功能

你可以做:

@Test
public void test() {
   get("/xxxx").then().statusCode(200).assertThat()
  .body("a", equalTo(1)); 
}

更多信息

我发现rest assured有一些有趣的功能

你可以做:

@Test
public void test() {
   get("/xxxx").then().statusCode(200).assertThat()
  .body("a", equalTo(1)); 
}

更多信息

您可以将JSON转换为JS对象,然后比较该对象的每个属性(如果该属性的键不等于“date”)

在下面的代码中,正在将
obj1
obj2
进行比较,并忽略
date
属性。 如果两者相同,则打印“相同”;如果两者不相同,则打印“不相同”(忽略
date
属性)
var obj1=JSON.parse('{“a”:“1”,“b”:“2”,“c”:“3”,“日期”:“当前日期”}');
var obj2=JSON.parse('{“a”:“1”,“b”:“2”,“c”:“3”,“日期”:“另一个日期”}');
设s1=Object.keys(obj1).length;//obj1的长度
设s2=Object.keys(obj2).length;//obj2的长度
让相同=真实;
for(设i=0;i=s2){
相同=错误;
打破
}
让当前_key=Object.key(obj1)[i];
让电流_值=obj1[电流_键];
如果(当前_key.localeCompare(“日期”)!=0){
if(当前值.localeCompare(obj2[当前值])!=0){
相同=错误;
打破
}
}
}
如果(相同){
console.log(“相同”);
}否则{
console.log(“不相同”);

}
您可以将JSON转换为JS对象,然后比较该对象的每个属性(如果该属性的键不等于“date”)

在下面的代码中,正在将
obj1
obj2
进行比较,并忽略
date
属性。 如果两者相同,则打印“相同”;如果两者不相同,则打印“不相同”(忽略
date
属性)
var obj1=JSON.parse('{“a”:“1”,“b”:“2”,“c”:“3”,“日期”:“当前日期”}');
var obj2=JSON.parse('{“a”:“1”,“b”:“2”,“c”:“3”,“日期”:“另一个日期”}');
设s1=Object.keys(obj1).length;//obj1的长度
设s2=Object.keys(obj2).length;//obj2的长度
让相同=真实;
for(设i=0;i=s2){
相同=错误;
打破
}
让当前_key=Object.key(obj1)[i];
让电流_值=obj1[电流_键];
如果(当前_key.localeCompare(“日期”)!=0){
if(当前值.localeCompare(obj2[当前值])!=0){
相同=错误;
打破
}
}
}
如果(相同){
console.log(“相同”);
}否则{
console.log(“不相同”);
}
我一直在使用它,它真的很有帮助

String json1 = "{\r\n" + "  \"a\": 1,\r\n" + "  \"b\": 2,\r\n" + "  \"c\": 3,\r\n"
            + " \"date\": \"30-07-2020\"\r\n" + "}";

String json2 = "{\r\n" + "  \"a\": 1,\r\n" + "  \"b\": 2,\r\n" + "  \"c\": 3,\r\n"
            + " \"date\": \"31-07-2020\"\r\n" + "}";

assertThatJson(json1).whenIgnoringPaths("date").isEqualTo(json2);
静态导入:

import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
    <dependency>
        <groupId>net.javacrumbs.json-unit</groupId>
        <artifactId>json-unit-assertj</artifactId>
        <version>2.18.1</version>
        <scope>test</scope>
    </dependency>
依赖关系:

import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
    <dependency>
        <groupId>net.javacrumbs.json-unit</groupId>
        <artifactId>json-unit-assertj</artifactId>
        <version>2.18.1</version>
        <scope>test</scope>
    </dependency>

net.javacrumps.json-unit

我一直在使用它,它真的很有帮助

String json1 = "{\r\n" + "  \"a\": 1,\r\n" + "  \"b\": 2,\r\n" + "  \"c\": 3,\r\n"
            + " \"date\": \"30-07-2020\"\r\n" + "}";

String json2 = "{\r\n" + "  \"a\": 1,\r\n" + "  \"b\": 2,\r\n" + "  \"c\": 3,\r\n"
            + " \"date\": \"31-07-2020\"\r\n" + "}";

assertThatJson(json1).whenIgnoringPaths("date").isEqualTo(json2);
静态导入:

import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
    <dependency>
        <groupId>net.javacrumbs.json-unit</groupId>
        <artifactId>json-unit-assertj</artifactId>
        <version>2.18.1</version>
        <scope>test</scope>
    </dependency>
依赖关系:

import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
    <dependency>
        <groupId>net.javacrumbs.json-unit</groupId>
        <artifactId>json-unit-assertj</artifactId>
        <version>2.18.1</version>
        <scope>test</scope>
    </dependency>

net.javacrumps.json-unit

  • 使用
    对于,需要将json从响应(对于Spring测试:
    MvcResult.getResponse().getContentAsString()
    )反序列化到对象。 可以使用
  • 使用与比较。
    为了避免手工创建json,可以使用Jackson
    ObjectMapper
    序列化预期对象。对于字段排除:
  • Map Map=objectMapper.convertValue(obj,newtypereference(){});
    删除(…);
    objectMapper.writeValueAsString(obj)
    
  • 使用
    对于,需要将json从响应(对于Spring测试:
    MvcResult.getResponse().getContentAsString()
    )反序列化到对象。 可以使用
  • 使用与比较。
    为了避免手工创建json,可以使用Jackson
    ObjectMapper
    序列化预期对象。对于字段排除:
  • Map Map=objectMapper.convertValue(obj,newtypereference(){});
    删除(…);
    objectMapper.writeValueAsString(obj)
    
    使用一个方法的对象进行比较,在该对象中您传递另一个对象而不检查
    日期
    字段。您所说的“使用一个方法的对象”是什么意思?使用一个方法的对象进行比较,在该对象中您传递另一个对象而不检查
    日期
    字段。您所说的“使用一个方法的对象”是什么意思?然后呢?如何比较这两个物体?然后呢?如何比较这两个对象?