Как добавить объект в файл json с помощью JSR 353 (Java API для обработки JSON)
Используя 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 ответа
Примечание: я не хочу загружать полный JSON в память, чтобы добавить мои данные.
По сути, вы не можете. Вам придется проанализировать всю структуру данных, чтобы ваш write(..)
знал бы где написать. В противном случае, он просто где-то добавляется, и это может нарушить формат JSON.
Так что читайте JSON из файла, генерируйте JsonArray
от него. Создать новый JsonObject
от ваших ценностей. Добавьте его в массив. Затем напишите полный массив.
Вы не можете просто "добавить". В общем случае вы должны прочитать в JSON, изменить образ памяти с древовидной структурой, а затем "сериализовать" его обратно в линейный JSON.
В очень простых случаях, таких как приведенные выше, теоретически вы можете стремиться к концу, возвращаясь к закрытию ]
затем выписать ,
, второй объект и новое закрытие ]
, но это не общее решение для обновления JSON.