2016-06-20 14 views
2

は、私はこのような構造を持つJSONファイルを持っている:Jackson:データバインディングによるJSON配列のストリーム?

[ 
    obj1, 
    obj2, 
    ... 
    objN 
] 

サブオブジェクトのすべては、それらの間には相互参照が存在しない、すなわち、完全に自己完結型です。問題はファイル全体が膨大であることです(ルート配列に100,000を超えるエントリ)。

データアレイを介してルートアレイの内容をストリームする方法はありますか?ルートアレイは決してメインメモリに完全に存在しません。私は、低レベルのJsonGenerator/JsonParser APIを避けたいと思います。

答えて

2

はい。 ObjectReader(のようなObjectMapperのようなさまざまな方法で構築されています)、readValues()というメソッドをチェックしてください。これはMappingIterator<ElementType>(使用するタイプのもの)です。このメソッドは、一度に1つの項目のみをバインドします。

値がルートレベルの配列である場合、これはそのまま動作します。 JSON構造のどこかが深い場合は、最初にJsonParserを作成してから最初の値に(nextToken()で)反復する必要がありますが、その後は効率的なアイテムごとのバインディングのためにMappingIteratorを作成することができます。

+0

ありがとう、それは私が始めるために必要なヒントです! – Alan47

関連する問題