gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:36:22 25 4
gpt4 key购买 nike

我正在尝试比较两个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com