我正在尝试比较两个 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"
}
}
但仍然面临问题:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
最佳答案
json1
的值(内部为 C:\test1.json
)不是有效的 JSON,json2
也是如此。它们看起来像包含 JSON的文件名称。如果是这样,您需要:
将(每个)文件的内容读入
String
,可能会通过StringBuilder
或CharBuffer
途中,并将该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/