杰克逊:通过数据绑定流JSON数组?

时间:2016-06-20 20:46:03

标签: json data-binding jackson streaming

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

[
    obj1,
    obj2,
    ...
    objN
]

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

杰克逊有没有办法通过数据绑定来传输根数组的内容,这样根数组永远不会完全驻留在主内存中?我想避免使用低级JsonGenerator / JsonParser API。

1 个答案:

答案 0 :(得分:2)

是。查看ObjectReader(使用ObjectMapper中的各种方法构建,如.readerFor(ElementType.class)),然后查看readValues()方法,该方法返回MappingIterator<ElementType>(对于您使用的任何类型) )。此方法一次只能绑定一个项目。

如果值在根级别数组中,则应该按原样运行。如果它们位于JSON结构的更深处,则必须首先构造JsonParser,然后迭代(使用nextToken())到第一个值,但之后您仍然可以创建MappingIterator以获得高效逐项绑定。