Following is the code to parse two json strings and compare them
import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class TestJson3{ private static String srcJsonStr = "SRC JSON String here"; private static String destJsonStr = "Dest JSON String here"; public static void main(String[] args){ try{ JSONObject srcJson = new JSONObject(srcJsonStr); JSONObject destJson = new JSONObject(destJsonStr); compareJson(srcJson, destJson); } catch(Exception e){ e.printStackTrace(); } } public static void compareJson(JSONObject srcJson, JSONObject destJson){ StringBuilder diffLog = new StringBuilder(); try{ MapsrcJsonMap = new LinkedHashMap (); Map destJsonMap = new LinkedHashMap (); srcJsonMap = parseJson("", srcJson, srcJsonMap); destJsonMap = parseJson("", destJson, destJsonMap); //union Set union = new HashSet (srcJsonMap.keySet()); union.addAll(destJsonMap.keySet()); //h1-h2 Set diff1 = new HashSet (srcJsonMap.keySet()); diff1.removeAll(destJsonMap.keySet()); //h1-h2 Set diff2 = new HashSet (destJsonMap.keySet()); diff2.removeAll(srcJsonMap.keySet()); //intersection Set intersect = new HashSet (srcJsonMap.keySet()); intersect.retainAll(destJsonMap.keySet()); if(intersect.size() > 0){ for(String key: intersect){ Object srcData = srcJsonMap.get(key); Object destData = destJsonMap.get(key); if( ! srcData.toString().equals(destData.toString())){ diffLog.append("KEY :: " + key + "\n"); diffLog.append("SRC DATA :: " + srcData + "\n"); diffLog.append("DEST DATA :: " + destData + "\n"); } } } if(diff1.size() > 0){ diffLog.append("\n"); diffLog.append("###########################"); diffLog.append("Only in SRC JSON"); diffLog.append("###########################"); diffLog.append("\n"); for(String key: diff1){ diffLog.append("KEY :: " + key + "\n"); diffLog.append("DATA :: " + srcJsonMap.get(key) + "\n"); diffLog.append("\n"); } } if(diff2.size() > 0){ diffLog.append("\n"); diffLog.append("###########################"); diffLog.append("Only in DEST JSON"); diffLog.append("###########################"); diffLog.append("\n"); for(String key: diff2){ diffLog.append("KEY :: " + key + "\n"); diffLog.append("DATA :: " + destJsonMap.get(key) + "\n"); diffLog.append("\n"); } } } catch(Exception e){ e.printStackTrace(); } System.out.println(diffLog.toString()); } public static Map parseJson(String key, JSONObject jsonObject, Map map){ try{ Iterator iterator = jsonObject.keys(); while(iterator.hasNext()){ String obj = iterator.next().toString(); String keyVal = (key.equals("")) ? obj : key + "." + obj; if(jsonObject.get(obj) instanceof JSONArray){ JSONArray jsonArr = (JSONArray) jsonObject.get(obj); for(int k=0; k < jsonArr.length; k++){ if(jsonArr.get(k) instanceof JSONObject){ parseJson(keyVal + "[" + k + "]", (JSONObject) jsonArr.get(k), map); } else{ map.put(keyVal, jsonArr.get(k)); } } } else{ if(jsonObject.get(obj) instanceof JSONObject){ parseJson(keyVal, (JSONObject) jsonObject.get(obj), map); } else{ map.put(keyVal, jsonObject.get(obj)); } } } } catch(Exception e){ e.printStackTrace(); } return map; } }