2017-09-14 1 views
0

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.

+0

il Avez-vous essayé de débogage en imprimant le tableau? –

+1

Vous pouvez comparer en convertissant json en objet Java en utilisant GSON, puis en utilisant l'interface du comparateur. –

Répondre

1

Lorsque les deux objets sont JSON tableaux, vous êtes juste en fonction de la position comparez des objets JSON, s'il vous plaît trouverez ci-dessous le code pour corriger au code,

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