Je JSONArrays qui doit être comparé qui peuvent avoir des entités de l'enfant à l'intérieur pas dans le même ordre que comme ceci:En comparant 2 JSONArray
[{ "A" : "IN", "B" : "DL"},{ "A" : "US", "B" : "KA"}] //JSONArray 1
[{ "A" : "US", "B" : "KA"},{ "A" : "IN", "B" : "DL"}] //JSONArray 2
Voici mon code. Avant d'appeler JsonElemnt, je suis en train de convertir à la fois le JSONArray à cordes et passer ensuite à ma fonction de comparer:
//Converting both JSONArray to String JsonArray1Str and JsonArray2Str
JsonElement jsonElement1 = parser.parse(JsonArray1Str);
JsonElement jsonElement2 = parser.parse(JsonArray2Str);
System.out.println(compareJson(jsonElement1, jsonElement2));
// Fonction 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;
}
Mais, je suis incapable de trouver où je Je vais mal. Est-ce que quelqu'un pourrait m'aider s'il vous plaît?
Éditer: Toute autre approche pour comparer ces deux JSONArray sont également les bienvenues.
il Avez-vous essayé de débogage en imprimant le tableau? –
Vous pouvez comparer en convertissant json en objet Java en utilisant GSON, puis en utilisant l'interface du comparateur. –