java - 无法使用 GSON 比较两个 json 文件

标签 java json gson

我正在尝试比较两个 JSON 字符串。下面是我的 Java 代码:

String json1 = "C:\\test1.json";
String json2 = "C:\\test2.json";

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

下面是我的 JSON 文件格式

我的 Json 1

{
    "00601":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00602":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00603":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        }
}

我的 Json 2

{
    "00601":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00602":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00603":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        }
}

我已经浏览过JSON Error "java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $"

但仍然面临问题:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

最佳答案

json1 的值(内部为 C:\test1.json)不是有效的 JSON,json2 也是如此。它们看起来像包含 JSON的文件名称。如果是这样,您需要:

  • 将(每个)文件的内容读入String,可能会通过StringBuilderCharBuffer 途中,并将该 String 传递给 .fromJson

  • 创建一个读取文件内容的 Reader,并将其传递给 .fromJson(Reader,Type) 方法而不是 (字符串,类型) 一;如果文件中的数据采用 JVM 的默认编码或与其兼容(并且纯 ASCII 数据(例如您的示例)与用作 JVM 默认值的所有编码兼容),则 FileReader 适合此操作,并且可以由 new FileReader(String) as documented here 的文件名构造

在一个严肃或较大的程序中,您应该小心关闭一个FileReader,或其他读取文件的方法,如FileInputStream,使用后可以避免占用资源。假设使用 Java8,try-with-resources 通常是最方便的方法。

关于java - 无法使用 GSON 比较两个 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870881/

相关文章:

java.lang.NullPointerException 但对象不为空(我想)

json - 如何在 Flutter 中的轮播( slider )中显示来自 JSON 文件的图像

json - JAXB 注释 POJO 用于 Jersey 中的 JSON 序列化为每个字段类型返回字符串

java - Gson HTTP 响应对象

java - Neo4j 嵌入式图 Java 可视化

java - 使用 "Microsoft Print to PDF"和 Java 将文档转换为 PDF

java - 注释 Controller 中的动态命令类

MYSQL LEFT JOIN 未显示所有数据

java - 我使用gson序列化java对象,并将LongSerializationPolicy设置为LongSerializationPolicy.STRING,但我无法理解结果

java - GSON反序列化键值到自定义对象