Я хочу сравнить две версии файла Json (получено из git) на наличие различий и отобразить уникальный идентификатор измененного элемента.
Пример Json:
Ниже приведена версия 1 моего образца Json:
{
"menu": {
"obj1": {
"id": "2",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
}
]
}
},
"obj2": {
"id": "1",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
}
]
}
}
}
}
Версия 2 образца Json:
{
"menu": {
"obj1": {
"id": "2",
"value": "File",
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
}
]
}
},
"obj2": {
"id": "1",
"value": "File",
"popup": {
"menuitem": [
{
"value": "Existing",
"onclick": "Open()"
}
]
}
}
}
}
Здесь "id" - мой уникальный идентификатор, и я попробовал приведенный ниже код, чтобы найти разницу
JSONParser parser = new JSONParser(new FileReader("D:/FromRepo/new.txt"));
Object obj = parser.parse();
JSONParser parser1 = new JSONParser(new FileReader("D:/FromRepo/new1.txt"));
Object obj1 = parser1.parse();
Gson g = new Gson();
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> firstMap = g.fromJson( obj.toString(), mapType);
Map<String, Object> secondMap = g.fromJson( obj1.toString(), mapType);
// System.out.println(Maps.difference(firstMap, secondMap). entriesDiffering());
Map<String, Object> leftFlatMap = FlatMapUtil.flatten(firstMap);
Map<String, Object> rightFlatMap = FlatMapUtil.flatten(secondMap);
MapDifference<String, Object> difference = Maps.difference(leftFlatMap, rightFlatMap);
System.out.println("\n\nEntries differing\n--------------------------");
difference.entriesDiffering()
.forEach((key, value) -> System.out.println(key + ": " + value));
Это дает мне следующий вывод
Entries differing
--------------------------
/menu/obj2/popup/menuitem/0/value: (New, Existing)
/menu/obj2/popup/menuitem/0/onclick: (CreateNewDoc(), Open())
Но есть ли способ получить идентификатор измененного элемента, в данном случае "id": "1"