In this article I am going to explain how to compare JSON with JAVA using Google-json library. The basic part of the JSON is JsonElement. There are 4 types JSON elements.
  1. Json Object : Surrounded with curly braces and have child JSON elements
  2. Json Primitive Element : It contains field name and it's value
  3. Json Array Element : It contains field name and array of JSON elements.
  4. Json Null Element : It contains nothing 

Implementation Concept

We can call 2 JSON Elements are equalm, when both elements's type and values are equal. Observe below flow chart
  1. Read input json elements as json1, json2
  2. Verify whether element type matches or not
  3. If both elements are objects, then iterate them as key-value pairs, compare its values
  4. If both elements are arrays, then compare its values with indexes
  5. If both elements are primitive, compare its values directly
  6. If both elements are null, no need of any comparison, both are equal

Java Program

Find below for java program
import java.io.StringReader;
import java.util.Map.Entry;
import java.util.Set;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class CompareJSON {
    public static void main(String[] args) {
        JsonParser parser = new JsonParser();
        // JSON String
        String json1 = "{" + "\"age\":100," 
                + "\"name\":\"srinivas\","
                + "\"school\":\"\","
                + "\"messages\":[\"msg 1\",\"msg 2\",\"msg 3\"]}";
        String json2 = "{" + "\"age\":10," 
                + "\"name\":\"srinivas\","
                + "\"school\":\"\","
                + "\"messages\":[\"msg 1\",\"msg 2\"]}";
        
        JsonElement jsonElement1 = parser.parse(new StringReader(json1));
        JsonElement jsonElement2 = parser.parse(new StringReader(json2));
        System.out.println(compareJson(jsonElement1, jsonElement2));
                
    }

    public static boolean compareJson(JsonElement json1, JsonElement json2) {
        boolean isEqual = true;
        // Check whether both jsonElement are not null
        if(json1 !=null && json2 !=null) {
            
            // Check whether both jsonElement are objects
            if (json1.isJsonObject() && json2.isJsonObject()) {
                Set<Entry<String, JsonElement>> ens1 = ((JsonObject) json1).entrySet();
                Set<Entry<String, JsonElement>> ens2 = ((JsonObject) json2).entrySet();
                JsonObject json2obj = (JsonObject) json2;
                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 (json1.isJsonArray() && json2.isJsonArray()) {
                JsonArray jarr1 = json1.getAsJsonArray();
                JsonArray jarr2 = json2.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 (json1.isJsonNull() && json2.isJsonNull()) {
                return true;
            } 
            
            // Check whether both jsonElement are primitives
            else if (json1.isJsonPrimitive() && json2.isJsonPrimitive()) {
                if(json1.equals(json2)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else if(json1 == null && json2 == null) {
            return true;
        } else {
            return false;
        }
        return isEqual;
    }
}

4 comments:

  1. good code. but how to get the diff?

    ReplyDelete
  2. Compare JSON with java using google GSON library and more to just start to compare with the coding is not possible for anyone. I don't think so best essay help for these pages is just not be share for you at the live library.

    ReplyDelete
  3. What ethical essay topics do you think are the best to write on? I am looking for advice. I have to pick up one topic and start writing on it. I am still doubting.

    ReplyDelete

Blogroll

Follow this blog by Email

Popular Posts