如何使用GSON获得两个json对象之间的差异?

时间:2015-09-01 03:52:25

标签: java android json gson

我使用此代码在Android中使用Gson比较两个JSON对象:

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);

有两种方法可以使用JSON格式的Gson在两个对象之间获得差异吗?

2 个答案:

答案 0 :(得分:12)

如果您将对象反序列化为Map<String, Object>,您也可以使用GuavaMaps.difference来比较两个结果地图。

请注意,如果您关心元素的订单Json不会保留Object字段的顺序,那么此方法赢了&# 39;显示那些比较。

以下是您的方式:

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对象包含哪些信息。

答案 1 :(得分:0)

符合 RFC 6902 标准的库链接,用于查找两个 JsonObject 对象之间的差异。

https://mvnrepository.com/artifact/com.tananaev/json-patch