Java 比较2 JSONArray
我有需要比较的JSONArray,其中可能有子实体,但顺序不同,如下所示:Java 比较2 JSONArray,java,arrays,json,jackson,Java,Arrays,Json,Jackson,我有需要比较的JSONArray,其中可能有子实体,但顺序不同,如下所示: [{ "A" : "IN", "B" : "DL"},{ "A" : "US", "B" : "KA"}] //JSONArray 1 [{ "A" : "US", "B" : "KA"},{ "A" : "IN", "B" : "DL"}] //JSONArray 2 这是我的密码。 在调用JSONElement之前,我将JSONArray转换为字符串,然后将其传递给我的函数进行比较: //Con
[{ "A" : "IN", "B" : "DL"},{ "A" : "US", "B" : "KA"}] //JSONArray 1
[{ "A" : "US", "B" : "KA"},{ "A" : "IN", "B" : "DL"}] //JSONArray 2
这是我的密码。
在调用JSONElement之前,我将JSONArray转换为字符串,然后将其传递给我的函数进行比较:
//Converting both JSONArray to String JsonArray1Str and JsonArray2Str
JsonElement jsonElement1 = parser.parse(JsonArray1Str);
JsonElement jsonElement2 = parser.parse(JsonArray2Str);
System.out.println(compareJson(jsonElement1, jsonElement2));
//比较函数
public static boolean compareJson(JsonElement jsonElement1, JsonElement jsonElement2) {
boolean isEqual = true;
// Check whether both jsonElement are not null
if (jsonElement1 != null && jsonElement2 != null) {
// Check whether both jsonElement are objects
if (jsonElement1.isJsonObject() && jsonElement2.isJsonObject()) {
Set<Entry<String, JsonElement>> ens1 = ((JsonObject) jsonElement1).entrySet();
Set<Entry<String, JsonElement>> ens2 = ((JsonObject) jsonElement2).entrySet();
JsonObject json2obj = (JsonObject) jsonElement2;
if (ens1 != null && ens2 != null && (ens2.size() == ens1.size())) {
// Iterate JSON Elements with Key values
for (Entry<String, JsonElement> en : ens1) {
isEqual = isEqual && compareJson(en.getValue(), json2obj.get(en.getKey()));
}
} else {
return false;
}
}
// Check whether both jsonElement are arrays
else if (jsonElement1.isJsonArray() && jsonElement2.isJsonArray()) {
JsonArray jarr1 = jsonElement1.getAsJsonArray();
JsonArray jarr2 = jsonElement2.getAsJsonArray();
if (jarr1.size() != jarr2.size()) {
return false;
} else {
int i = 0;
// Iterate JSON Array to JSON Elements
for (JsonElement je : jarr1) {
isEqual = isEqual && compareJson(je, jarr2.get(i));
i++;
}
}
}
// Check whether both jsonElement are null
else if (jsonElement1.isJsonNull() && jsonElement2.isJsonNull()) {
return true;
}
// Check whether both jsonElement are primitives
else if (jsonElement1.isJsonPrimitive() && jsonElement2.isJsonPrimitive()) {
if (jsonElement1.equals(jsonElement2)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else if (jsonElement1 == null && jsonElement2 == null) {
return true;
} else {
return false;
}
return isEqual;
}
公共静态布尔比较器JsonElement jsonElement1、JsonElement jsonElement2){
布尔相等=真;
//检查两个jsonElement是否都不为空
if(jsonElement1!=null&&jsonElement2!=null){
//检查两个jsonElement是否都是对象
if(jsonElement1.isJsonObject()&&jsonElement2.isJsonObject()){
Set ens1=((JsonObject)jsonElement1.entrySet();
Set ens2=((JsonObject)jsonElement2.entrySet();
JsonObject JSON2Object=(JsonObject)jsonElement2;
如果(ens1!=null&&ens2!=null&&(ens2.size()==ens1.size()){
//使用键值迭代JSON元素
对于(条目en:ens1){
isEqual=isEqual&&compareJson(en.getValue(),json2obj.get(en.getKey());
}
}否则{
返回false;
}
}
//检查两个jsonElement是否都是数组
else if(jsonElement1.isJsonArray()&&jsonElement2.isJsonArray()){
JsonArray jarr1=jsonElement1.getAsJsonArray();
JsonArray jarr2=jsonElement2.getAsJsonArray();
如果(jarr1.size()!=jarr2.size()){
返回false;
}否则{
int i=0;
//将JSON数组迭代到JSON元素
对于(JsonElement je:jarr1){
isEqual=isEqual&&compareJson(je,jar2.get(i));
i++;
}
}
}
//检查两个jsonElement是否都为空
else if(jsonElement1.isJsonNull()&&jsonElement2.isJsonNull()){
返回true;
}
//检查两个jsonElement是否都是原语
else if(jsonElement1.isJsonPrimitive()&&jsonElement2.isJsonPrimitive()){
if(jsonElement1.equals(jsonElement2)){
返回true;
}否则{
返回false;
}
}否则{
返回false;
}
}else if(jsonElement1==null&&jsonElement2==null){
返回true;
}否则{
返回false;
}
回报均等;
}
但是,我找不到我错在哪里。谁能帮帮我吗
编辑:也欢迎使用任何其他方法来比较这两个JSONArray。当两个对象都是JSON数组时,您只是根据JSON对象的位置进行比较,请查找下面的代码以获取正确的at代码
else if (jsonElement1.isJsonArray() && jsonElement2.isJsonArray()) {
JsonArray jarr1 = jsonElement1.getAsJsonArray();
JsonArray jarr2 = jsonElement2.getAsJsonArray();
if (jarr1.size() != jarr2.size()) {
return false;
} else {
// Iterate JSON Array to JSON Elements
for (JsonElement je1 : jarr1) {
boolean flag = false;
for(JsonElement je2 : jarr2){
flag = compareJson(je1, je2);
if(flag){
jarr2.remove(je2);
break;
}
}
isEqual = isEqual && flag;
}
}
}
您是否尝试过通过打印数组来调试它?您可以通过使用GSON将json转换为java对象,然后使用comparator接口进行比较。