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


person Yann Le Moigne    schedule 28.03.2014    source источник


Ответы (2)


Примечание. Я не хочу загружать в память полный json для добавления своих данных.

В принципе, вы не можете. Вам придется разобрать всю структуру данных, чтобы ваш write(..) знал, куда писать. В противном случае он просто куда-то добавляется, что может нарушить формат JSON.

Итак, прочитайте JSON из файла, сгенерируйте из него JsonArray. Создайте новый JsonObject из ваших значений. Добавьте его в массив. Затем напишите полный массив.

person Sotirios Delimanolis    schedule 30.03.2014

Вы не можете просто «добавить». В общем случае вы должны прочитать JSON, изменить образ памяти с древовидной структурой, а затем «сериализовать» его обратно в линейный JSON.

В очень простых случаях, таких как приведенный выше, теоретически вы могли бы перейти к концу, вернуться назад поверх закрывающего ], затем записать ,, второй объект и новый закрывающий ], но это не общее решение для обновления JSON.

person Hot Licks    schedule 30.03.2014