public static String print(String prefixStr, JsonDiff jsonDiff) { final StringBuilder sb = new StringBuilder(); for (String key : jsonDiff.getData().keySet()) { Object value = jsonDiff.getData().get(key); if (key.startsWith(JsonDiff.ADDED_ITEM_CODE)) { sb.append(prefixStr + "+[" + JsonDiff.getStringWithoutCode(key) + "]\n"); sb.append(print(prefixStr + " ", value)); } else if (key.startsWith(JsonDiff.REMOVED_ITEM_CODE)) { sb.append(prefixStr + "-[" + JsonDiff.getStringWithoutCode(key) + "]\n"); sb.append(print(prefixStr + " ", value)); } else if (key.startsWith(JsonDiff.COMMON_ITEM_CODE)) { sb.append(prefixStr + "~[" + JsonDiff.getStringWithoutCode(key) + "]\n"); sb.append(print(prefixStr + " ", value)); } else if (key.startsWith(JsonDiff.CHANGED_ITEM_CODE)) { sb.append(prefixStr + "~[" + JsonDiff.getStringWithoutCode(key) + "]\n"); Map<?, ?> map = (Map<?, ?>) value; Object baseValue = map.get(JsonDiff.CHANGED_ITEM_BASE); Object deltaValue = map.get(JsonDiff.CHANGED_ITEM_DELTA); sb.append(prefixStr + "BASE\n"); sb.append(print(prefixStr + " ", baseValue)); sb.append(prefixStr + "DELTA\n"); sb.append(print(prefixStr + " ", deltaValue)); } else { sb.append(prefixStr + key + "\n"); sb.append(print(prefixStr + " ", value)); } } return sb.toString(); }