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
高效的逐项绑定。
我有一个 JSON 文件,其结构如下:
[
obj1,
obj2,
...
objN
]
所有子对象都是完全独立的,即它们之间没有交叉引用。问题是整个文件很大(根数组中有 >100k 个条目)。
Jackson 中是否有任何方法可以通过数据绑定将根数组的内容流式传输,从而使根数组永远不会完全驻留在主内存中?我想避免低级别 JsonGenerator/JsonParser API.
是的。查看 ObjectReader
(使用 ObjectMapper
中的各种方法构建,如 .readerFor(ElementType.class)
),然后查看其 readValues()
方法,其中 returns MappingIterator<ElementType>
(对于无论你使用什么类型)。此方法一次只能绑定一个项目。
如果值在根级数组中,这应该按原样工作。如果它们在 JSON 结构的某个更深的地方,你必须先构造 JsonParser
,然后迭代(使用 nextToken()
)到第一个值,但之后你仍然可以创建 MappingIterator
高效的逐项绑定。