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

标签 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 获取两个对象之间的差异

最佳答案

如果将对象反序列化为 Map<String, Object> , 你可以用 Guava另外,您可以使用 Maps.difference 比较两个生成的 map 。

请注意,如果您关心元素的顺序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 的信息对象包含。

关于java - 如何使用 GSON 获取两个 json 对象之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32323256/

相关文章:

java.rmi.MarshalException : Failed to communicate

java - 以编程方式更改 Android 中的 DatePicker 日历大小

Android多项目依赖和大小

python - 使用python按值排序Json对象列表

android - 使用 GSON 库解析 JSON 时出现问题

java - IDE 真的值得吗?

java - 将 ISO8601 日期时间转换为另一种基于 Java 中的州名称的 ISO8601 格式?

android - 如何像9gag一样在android中创建布局

android - 如何知道android中的应用程序是否启用了通知?

java - Thymeleaf 将 JSON 字符串作为 JSON 对象打印到 javascript 变量中