【问题标题】:Manipulate JSON with Gson [duplicate]使用 Gson 操作 JSON [重复]
【发布时间】:2021-12-17 16:39:13
【问题描述】:

我有以下问题。我有一个 Writer 类,它通过 Gson 将我创建的所有对象写入 JSON 文件。输出如下所示:

    {
  "eventID": 1,
  "title": "one",
  "timeCreated": "Sep 23, 2007, 10:10:00 AM",
  "timeModified": "Sep 23, 2007, 10:10:00 AM",
  "timeStart": "Nov 11, 2999, 11:11:00 AM",
  "timeEnd": "Nov 11, 3999, 11:11:00 AM",
  "alarmOn": true,
  "content": ""
}

eventID 是每次创建新 obj 时使用 AtomicInteger 创建的序列化整数。

我想操作这些对象,例如,设置一个新标题。 因此,在第一步中,我尝试通过 fromJson 将 JSON 返回到 java 中

Gson gson = new Gson();
Type myDataType = new TypeToken<Collection<Event>>() {
}.getType();
Collection<Event> myData = gson.fromJson("awesome.json", myDataType);
for (Event e : myData) {
    System.out.println("value= " + e.getTitle());
}

但是,这会导致错误

线程“main”com.google.gson.JsonSyntaxException 中的异常:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $

如何正确地将我的 json 读回我的 java 类,应用一些更改,然后再将其写入 json?

【问题讨论】:

  • 你能打印出你在代码中提到的awesome.json的内容吗?
  • 字符串"awesome.json"的内容 awesome.json。 OP 对此重载感到困惑:javadoc.io/doc/com.google.code.gson/gson/2.8.5/com/google/gson/… -- 它 接受 JSON 作为字符串,是的 awesome.json 它不是 一个有效的 JSON,它看起来像一个文件名,资源名称,无论如何,但根本不是 JSON。将文件内容读入字符串,或者最好打开一个java.io.InputStream,将其包装在java.io.Reader 中并传递给fromJson 方法重载。

标签: java json gson


【解决方案1】:

我们来看看错误代码

线程“main”com.google.gson.JsonSyntaxException 中的异常:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $

所以,图书馆似乎期待json array,但你给它一个字符串。

这很可能与 new TypeToken&lt;Collection&lt;Event&gt;&gt;() 类似,您说您的类型是事件的 collection,而不是单个事件。

尝试将其更改为TypeToken&lt;Event&gt;,看看是否可行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2017-08-25
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多