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(); }
@Override public String prettyPrint() { return "Difference between base and delta\n" + _jsonDiff.prettyPrint(" "); } }
JsonDiff diff = new JsonDiff(lhsJ, rhsJ); if (!diff._data.isEmpty()) { String indexAsString = COMMON_ITEM_CODE + i; JsonDiff diff = new JsonDiff(lhsA, rhsA); if (!diff._data.isEmpty()) { String indexAsString = COMMON_ITEM_CODE + i; String removedIndex = REMOVED_ITEM_CODE + i; Object lhsCurrentElem = lhsArray.get(i); Object jdValue = getValue(lhsCurrentElem); _data.put(removedIndex, jdValue); String addedIndex = ADDED_ITEM_CODE + i; Object rhsCurrentElem = rhsArray.get(i); Object jdValue = getValue(rhsCurrentElem); _data.put(addedIndex, jdValue);
private Object getValue(Object object) throws JSONException { if (object instanceof JSONObject) { JSONObject j = (JSONObject) object; Map<String, Object> map = new TreeMap<>(); for (Iterator<?> i = j.keys(); i.hasNext(); ) { String key = (String) i.next(); Object value = j.get(key); Object jdValue = getValue(value); map.put(key, jdValue); } return map; } else if (object instanceof JSONArray) { List<Object> list = new LinkedList<>(); JSONArray array = (JSONArray) object; for (int i = 0; i < array.length(); i++) { Object value = array.get(i); Object jdValue = getValue(value); list.add(jdValue); } return list; } else { return object; } }
JSONObject beforeJson = new JSONObject(beforeJsonStr); JSONObject afterJson = new JSONObject(afterJsonStr); JsonDiff diff = new JsonDiff(beforeJson, afterJson);
for (String lhsOnlyKey : lhsOnlyKeys) { String removedKeyName = REMOVED_ITEM_CODE + lhsOnlyKey; _data.put(removedKeyName, getValue(lhs.get(lhsOnlyKey))); _data.put(addedKeyName, getValue(rhs.get(rhsOnlyKey))); JsonDiff value = new JsonDiff(lhsValueJson, rhsValueJson); if (!value._data.isEmpty()) { _data.put(commonKey, value); JsonDiff arrayDiff = new JsonDiff(lhsArray, rhsArray); if (!arrayDiff._data.isEmpty()) { _data.put(commonKey, arrayDiff);
private static String print(String prefixStr, Object value) { final StringBuilder sb = new StringBuilder(); if (value instanceof JsonDiff) { sb.append(((JsonDiff) value).prettyPrint(prefixStr + " ")); } else if (value instanceof Map<?, ?>) { sb.append(print(prefixStr + " ", (Map<?, ?>) value)); } else if (value instanceof List<?>) { sb.append(print(prefixStr + " ", (List<?>) value)); } else if (value instanceof String) { sb.append(prefixStr + " " + value + "\n"); } else { try { sb.append(BatfishObjectMapper.writePrettyString(value)); } catch (JsonProcessingException e) { sb.append("Exception while pretty printing " + value + "\n" + e.getMessage()); } } return sb.toString(); }