如何使用JSR 353(用于JSON处理的Java API)将对象附加到json文件

时间:2014-03-28 23:32:20

标签: java json append stream-processing jsr-353

使用JSR-353(https://jsonp.java.net/index.html) 我想打开一个json文件并在根数组中附加一些对象,例如:

[{"foo":"bar"}]

我想要一个像这样的代码:

try(JsonGenerator writer = Json.createGenerator(new FileOutputStream(this.file))){
    writer.writeStartObject().write("hello", "world").writeEnd();
} catch (IOException e) {
    e.printStackTrace();
}

最终获得:

[
    {"foo":"bar"},
    {"hello":"world"}
]

注意:我不想在内存中加载完整的json来附加我的数据。

2 个答案:

答案 0 :(得分:2)

  

注意:我不想在内存中加载完整的json来追加   我的数据。

基本上,你不能。您必须解析完整的数据结构,以便write(..)知道在哪里写。否则,它只是附加在某处,可能会破坏JSON格式。

所以从文件中读取JSON,从中生成JsonArray。从您的值中创建一个新的JsonObject。将其添加到数组中。然后写完整数组。

答案 1 :(得分:1)

你不能简单地“追加”。在一般情况下,您必须读入JSON,修改树形结构的内存映像,然后将其“序列化”回线性JSON。

在非常简单的情况下,如上所述你理论上可以在结束]上寻找结尾,退格,然后写出,,第二个对象,以及新的结束{{1但是,它不是更新JSON的通用解决方案。