我有2个JSON文件。两者都具有包含对象列表的相同结构。我必须使用断言来检查两个JSON文件中对象的键是否相等。每个属性都映射到Java类中的变量。
对于其他键(可能仅仅是对象/变量),检查assertEquals很简单,但是对于对象列表,我找不到方法。
第一个JSON文件
"cars":[
{
"name" : Camry,
"make" : Toyota
},
{
"name" : Maruti 800,
"make" : Maruti Suzuki
}
]
第二个Json文件
"cars":[
{
"name" : Mustang,
"make" : Coupe
},
{
"name" : Maruti 800,
"make" : Maruti Suzuki
}
]
读取属性,名称和制造商并将其存储在名为CarDetails的类中。属性“汽车”存储在MasterCar类中。我必须将第一个JSON文件中的“汽车”列表与第二个文件中的列表进行比较。在上面的示例代码中,我需要能够为JSON文件中的每个属性创建断言。例如,assertEquals(file1.cars [0] .name,file2.cars [0] .name)。我可以手动执行此操作,但是例如,如果列表包含50个对象,则为每个属性为多个对象手动创建断言将很繁琐。我想知道是否可以遍历列表并为列表中的每个对象独立创建断言。
答案 0 :(得分:0)
在我看来,每个json文件都代表汽车列表...。我只是将文件反序列化为列表。您引用“键”,但未定义什么是键。在Java中,对象可以重写equals()来定义自己的相等性。它还可以定义hashcode() 即
public class Car(){
private String model;
private String make;
public Car(String make; String model) {
this.model = model;
this.make = make;
}
@Override
public boolean equals(Obj obj){
return obj instance of Car.class &&
make.equals(((Car)obj).getMake())
&& model.equals(((Car)obj).getModel())
}
//override hashcode as well
//define getters
}
然后,您基本上可以遍历每个列表,并检查列表1中的每个列表是否包含在列表2中。即使用List.contains(obj)
您可以在此处阅读有关覆盖等于和哈希码的更多信息。 https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/