【问题标题】:Not able to compare two json files with GSON无法将两个 json 文件与 GSON 进行比较
【发布时间】:2016-08-10 10:31:22
【问题描述】:

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

【问题讨论】:

  • 所以问题是Gson#fromJson 抛出一些异常?也许您可以改写问题并发布完整的堆栈跟踪..

标签: java json gson


【解决方案1】:

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

  • 将(每个)文件的内容读入String,可能会在途中经过StringBuilderCharBuffer等其他类型,然后传递@ 987654328@转.fromJson

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

在一个严重或更大的程序中,你应该小心closeFileReader,或其他读取文件的方法,如FileInputStream,使用后避免占用资源。假设 Java8,try-with-resources 通常是最方便的方法。

【讨论】:

  • 是的,你说得对,我犯了一个愚蠢的错误,感谢您的发现。
猜你喜欢
  • 2017-07-14
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2017-10-27
  • 1970-01-01
相关资源
最近更新 更多