Java 在json中保存记录并附加它们并进行解析

Java 在json中保存记录并附加它们并进行解析,java,json,gson,Java,Json,Gson,我正在尝试用GSON构建类似数据库的东西。我想存储同一对象的记录,并能够随时追加新记录。另外,我正在尝试构建一个解析器,它将把json中的所有对象都放到ArrayList中。我怎样才能做到这一点?现在我写了这样的东西: public void addRecord(Record record) throws IOException { JsonWriter writer = new JsonWriter(new FileWriter("/file.json", true));

我正在尝试用GSON构建类似数据库的东西。我想存储同一对象的记录,并能够随时追加新记录。另外,我正在尝试构建一个解析器,它将把json中的所有对象都放到ArrayList中。我怎样才能做到这一点?现在我写了这样的东西:

public void addRecord(Record record) throws IOException {

    JsonWriter writer = new JsonWriter(new FileWriter("/file.json", true));

    writer.setIndent(" ");
    gson.toJson(record, Record.class, writer);
    writer.close();
}
但intelliJ告诉我,JSON标准只允许一个顶级值。如何避免呢?据我所知,该文件应该只包含一个列表,我应该向其添加新对象,但我不知道如何添加。另外,如何将它们解析为ArrayList

但intelliJ告诉我,JSON标准只允许一个顶级值

对。 您实现的是连接的JSON(请参阅)。 您仍然可以使用它,但您的记录文件不会被JSON兼容工具解析。 如果不想使用“原始”JSON流,可以实现基于JSON数组的流。 这需要一些工作,但它可以让您生成和使用有效的JSON文档

final类JsonStreams{
私有JsonStreams(){
}
@抑制警告(“资源”)
静态无效副本(最终JsonReader读取器、最终JsonWriter写入器)
抛出IOException{
智力水平=0;
循环:
for(JsonToken-token=reader.peek();token!=null;token=reader.peek()){
交换机(令牌){
案例开始\u数组:
reader.beginArray();
writer.beginArray();
++水平;
打破
案例结束单元阵列:
reader.endArray();
writer.endArray();
如果(--level==0){
返回;
}
打破
案例开始对象:
reader.beginObject();
writer.beginObject();
++水平;
打破
案例结束对象:
reader.endObject();
writer.endObject();
如果(--level==0){
返回;
}
打破
案例名称:
最终字符串名称=reader.nextName();
作者姓名(姓名);
打破
大小写字符串:
最后一个字符串s=reader.nextString();
作者:价值观;
打破
案件编号:
最终数字n=新的BigDecimal(reader.nextString());
writer.value(n);
打破
大小写布尔值:
最终布尔值b=reader.nextBoolean();
作者:价值(b);
打破
大小写为空:
reader.nextNull();
writer.nullValue();
打破
案例结束文件:
断环;
违约:
抛出新断言错误(令牌);
}
}
}

静态无效appendToArray(final JsonReader JsonReader、final JsonWriter JsonWriter、final Consumer)基本上,您希望存储一个
记录列表
?。@NiVeR确切地说,并返回它们。我将在几分钟内为您编写一个示例。