Как получить различия между двумя объектами json с помощью GSON?

Я использовал этот код для сравнения двух объектов JSON с использованием Gson в Android:

String json1 = "{"name": "ABC", "city": "XYZ"}"; String json2 = "{"city": "XYZ", "name": "ABC"}"; JsonParser parser = new JsonParser(); JsonElement t1 = parser.parse(json1); JsonElement t2 = parser.parse(json2); boolean match = t2.equals(t1); 

Есть ли способ получить два различия между двумя объектами, используя Gson в формате JSON?

Если вы десериализуете объекты как Map<String, Object> , вы также можете использовать Guava , вы можете использовать Maps.difference для сравнения двух результирующих карт.

Обратите внимание: если вы заботитесь о порядке элементов, Json не сохраняет порядок в полях Object s, поэтому этот метод не будет показывать эти сравнения.

Вот как вы это делаете:

 public static void main(String[] args) { String json1 = "{\"name\":\"ABC\", \"city\":\"XYZ\", \"state\":\"CA\"}"; String json2 = "{\"city\":\"XYZ\", \"street\":\"123 anyplace\", \"name\":\"ABC\"}"; Gson g = new Gson(); Type mapType = new TypeToken<Map<String, Object>>(){}.getType(); Map<String, Object> firstMap = g.fromJson(json1, mapType); Map<String, Object> secondMap = g.fromJson(json2, mapType); System.out.println(Maps.difference(firstMap, secondMap)); } 

Эта программа выводит:

 not equal: only on left={state=CA}: only on right={street=123 anyplace} 

Подробнее о том, какая информация содержится в объекте MapDifference читайте здесь.

Intereting Posts
Jellybean (API 16) пока не отображается на моем Android SDK Manager Проблема параллелизма для аннулирования цикла опроса Ошибка приложения при возобновлении Каков правильный способ издеваться над наблюдаемым RxJava Android – Junit – тестируемый проект использует внешний Jar Каков наилучший способ поддержки устаревших методов, которые заменяются новыми? Android USB API: переключение между загрузкой и отправкой данных Junit.framework.AssertionFailedError: Исключение в конструкторе: (java.lang.NoClassDefFoundError) Java.lang.SecurityException: требуется разрешение BLUETOOTH: ни пользователь 10065, ни текущий процесс не имеет android.permission.BLUETOOTH Gradle 3.0 Alpha 2 бросает исключение, в то время как Alpha 1 отлично работает Java-приложение для Android -> переключиться на Scala Android: getBluetoothService (), вызываемый без BluetoothManagerCallback Пауза / Возобновление MediaCodec Как реализовать множественные веб-просмотры cordova в Управлении с использованием фрагментов? Android: Как установить предпочтительный режим просмотра клавиатуры из IME