Как сравнить два json-файла на разницу и получить уникальный идентификатор измененного атрибута - PullRequest
0 голосов
/ 08 мая 2019

Я хочу сравнить две версии файла 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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...