使用Gson操作JSON [duplicate]

ilmyapht  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(120)

此问题在此处已有答案

Expected BEGIN_ARRAY but was STRING but JSON is correct(1个答案)
去年关闭了。
我遇到了以下问题。我有一个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是每次创建新对象时用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”中出现异常。java.lang.IllegalStateException:路径$的第1行第1列需要开始_ARRAY,但它是STRING
我如何正确地将json读回我的java类,应用一些更改,然后再写回json?

56lgkhnf

56lgkhnf1#

让我们看一下错误代码
在线程“main”中出现异常。java.lang.IllegalStateException:路径$的第1行第1列需要开始_ARRAY,但它是STRING
因此,看起来库需要的是json array,但您给予它的却是String。
它很可能与此有关,比如new TypeToken<Collection<Event>>(),你说你的类型是一个collection的事件,而不是一个事件。
尝试将其更改为TypeToken<Event>,看看是否有效。

相关问题