gpt4 book ai didi

java - 比较 2 个 JSONArray

转载 作者:行者123 更新时间:2023-11-30 02:23:34 27 4
gpt4 key购买 nike

我有需要比较的 JSONArrays,其中可能有子实体,但顺序不同,如下所示:

[{ "A" : "IN", "B" : "DL"},{ "A" : "US", "B" : "KA"}] //JSONArray 1
[{ "A" : "US", "B" : "KA"},{ "A" : "IN", "B" : "DL"}] //JSONArray 2

这是我的代码。在调用 JsonElemnt 之前,我将 JSONArray 转换为 String,然后将其传递给我的函数进行比较:

          //Converting both JSONArray to String JsonArray1Str and JsonArray2Str
JsonElement jsonElement1 = parser.parse(JsonArray1Str);
JsonElement jsonElement2 = parser.parse(JsonArray2Str);
System.out.println(compareJson(jsonElement1, jsonElement2));

//compareJson函数

  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;

}

但是,我找不到哪里出错了。有人可以帮我吗?

编辑:也欢迎任何其他比较这两个 JSONArray 的方法。

最佳答案

当两个对象都是JSON数组时,您只是根据JSON对象的位置进行比较,请在代码中找到正确的代码,

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;
}
}
}

关于java - 比较 2 个 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46209543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com