【发布时间】: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方法重载。