我正在尝试比较两个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
答案 0 :(得分:1)
内部为json1
的{{1}}的值不是有效的JSON,对C:\test1.json
也是如此。它们看起来像包含 JSON 的文件的名称。如果是这样,您需要:
将(每个)文件的内容读入json2
,可能会通过其他类型,例如String
或StringBuilder
方式,并将CharBuffer
传递给String
创建一个.fromJson
来读取文件的内容,并将其传递给Reader
方法而不是.fromJson(Reader,Type)
方法;如果文件中的数据与JVM的默认编码相同(并且仅ASCII数据,例如您的示例与用作JVM默认值的所有编码兼容),那么(String,Type)
适用于此可以使用new FileReader(String)
as documented here
在严重或较大的程序中,您应该谨慎使用FileReader
close
或其他方法(如FileReader
读取文件,以避免占用资源。假设Java8,FileInputStream
通常是最方便的方法。