Как добавить объект в файл 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.

Другие вопросы по тегам