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.
- Json Object : Surrounded with curly braces and have child JSON elements
- Json Primitive Element : It contains field name and it's value
- Json Array Element : It contains field name and array of JSON elements.
- 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
- Read input json elements as json1, json2
- Verify whether element type matches or not
- If both elements are objects, then iterate them as key-value pairs, compare its values
- If both elements are arrays, then compare its values with indexes
- If both elements are primitive, compare its values directly
- 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; } }
good code. but how to get the diff?
ReplyDeletewhat if JSON order changes ?
ReplyDeleteCompare 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.
ReplyDeleteWhat 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.
ReplyDeleteFull satisfaction from help essay the service. We care that our customers are satisfied with the attitude of our company representatives
ReplyDeleteThey are not able to gather ideas, come up with a problem or theme to work on. write my assignment We can call 2 JSON Elements are equalm, when both elements's type and values are equal. Observe below flow chart
ReplyDelete