Недавно пытался разобраться, как передавать JSON контент через конечную точку HTTP, так как я не хочу сохранять весь JSON в памяти перед отправкой ответа.
Однако у меня есть некоторые сомнения касались того, как это сделать, и нужно ли изменить мою предыдущую схему JSON, чтобы справиться с потоковой передачей и последующим анализом.
В настоящее время у меня есть (и я хотел бы все еще выполнять потоковую передачу) следующее.
{
"content": [ // I don't want to wait for this array to be populated to flush it.
{
"key": "value",
"yet": "another_value"
}, // read individual nested record, flush it
{
"key": "valueagain",
"yet": "another_value_in_here"
} // read individual nested record, flush it
],
"random": {
"more": "fields",
"in": {
"here": "yeah"
}
}
}
Я сомневаюсь, есть ли способ (с использованием Джексона или любой другой Java lib) для потоковой передачи внутренних частей JSON без ожидания закрытия значения данного ключ?
Допустим, я хочу начать потоковую передачу
{
"content": [
...
И затем все содержимое, следующее за этим ...
{
"key": "value",
"yet": "another_value"
}
Или способ сделать это изменив общий результат на этот.
[
{
"key": "value",
"yet": "another_value"
},
{
"key": "valueagain",
"yet": "another_value_in_here"
},
{
"more": "fields",
"in": {
"here": "yeah"
}
}
]
Так что, в принципе, имея JsonGenerator
, смогу ли я обработать sh неполных массивов, таких как в моем примере?
jGenerator.writeStartObject();
jGenerator.writeFieldName("content");
jGenerator.writeStartArray();
jGenerator.flush(); // initial stream, records incoming within next flush. Can this be streamed?
jGenerator.writeStartObject();
jGenerator.writeStringField("key", "value");
jGenerator.writeStringField("yet", "another_value");
jGenerator.writeEndObject();
jGenerator.flush(); // streaming individual JSON object
... so on so forth until array is complete ...
jGenerator.writeEndArray();
jsonGenerator.writeFieldName("random");