0
我有JSONArrays一個需要相比,可能有子實體內它不會以相同的順序,雖然是這樣的:比較2 JSONArray
[{ "A" : "IN", "B" : "DL"},{ "A" : "US", "B" : "KA"}] //JSONArray 1
[{ "A" : "US", "B" : "KA"},{ "A" : "IN", "B" : "DL"}] //JSONArray 2
這裏是我的代碼。 調用JsonElemnt之前,我都轉換的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));
// 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也歡迎。
你嘗試通過打印陣列調試它? – 2017-09-14 02:38:42
您可以使用GSON將json轉換爲java對象,然後使用比較器接口進行比較。 –