我有一个JSON文件,其结构如下:
[
obj1,
obj2,
...
objN
]
所有子对象都是完全独立的,即它们之间没有交叉引用。问题是整个文件很大(根数组中的> 100k条目)。
杰克逊有没有办法通过数据绑定来传输根数组的内容,这样根数组永远不会完全驻留在主内存中?我想避免使用低级JsonGenerator / JsonParser API。
答案 0 :(得分:2)
是。查看ObjectReader
(使用ObjectMapper
中的各种方法构建,如.readerFor(ElementType.class)
),然后查看readValues()
方法,该方法返回MappingIterator<ElementType>
(对于您使用的任何类型) )。此方法一次只能绑定一个项目。
如果值在根级别数组中,则应该按原样运行。如果它们位于JSON结构的更深处,则必须首先构造JsonParser
,然后迭代(使用nextToken()
)到第一个值,但之后您仍然可以创建MappingIterator
以获得高效逐项绑定。