Jackson:通过数据绑定流式传输 JSON 数组?

Jackson: Stream JSON array via databinding?

我有一个 JSON 文件,其结构如下:

[
    obj1,
    obj2,
    ...
    objN
]

所有子对象都是完全独立的,即它们之间没有交叉引用。问题是整个文件很大(根数组中有 >100k 个条目)。

Jackson 中是否有任何方法可以通过数据绑定将根数组的内容流式传输,从而使根数组永远不会完全驻留在主内存中?我想避免低级别 JsonGenerator/JsonParser API.

是的。查看 ObjectReader(使用 ObjectMapper 中的各种方法构建,如 .readerFor(ElementType.class)),然后查看其 readValues() 方法,其中 returns MappingIterator<ElementType>(对于无论你使用什么类型)。此方法一次只能绑定一个项目。

如果值在根级数组中,这应该按原样工作。如果它们在 JSON 结构的某个更深的地方,你必须先构造 JsonParser,然后迭代(使用 nextToken())到第一个值,但之后你仍然可以创建 MappingIterator 高效的逐项绑定。