2017-11-15 21 views
1

この構造を反復するのに問題があります。私はジャクソンを使っていくつかのアプローチがあることを知っています。誰かが迅速かつ管理しやすいソリューションを提供できることを願っています。ジャクソンを使用して複数の子ノードを反復する

JSON構造は全体を通して一貫しており、すべての子はサイズに関係なく「子」フィールドを持ちます。

各ノードにフィールド1、フィールド2、フィールド3を出力したいとします。ノードの階層は無関係です。

JsonFactory factory = new JsonFactory(); 
JsonParser parser = factory.createParser(json); 

while (parser.nextToken() != null) { 
    String name = parser.getCurrentName(); 
    if ("field1".equals(name)) { 
     parser.nextToken();     // Advance to the field value 
     String value = parser.getText(); // Get the field value as a string 
     System.out.println(value); 
    } 
} 
parser.close(); 

通常のストリーミングAPIを使用するために多くの作業が必要ですが、(階層が重要ではないので)この場合には、適切なようだ:

{ 
    "field1": "example data", 
    "field2": "example data2", 
    "field3": "example data3", 
    "children": [{ 
     "field1": "example data", 
     "field2": "example data2", 
     "field3": "example data3", 
     "children": [{ 
       "field1": "example data", 
       "field2": "example data2", 
       "field3": "example data3", 
       "children": [] 
      }, 
      { 
       "field1": "example data", 
       "field2": "example data2", 
       "field3": "example data3", 
       "children": [] 
      } 
     ] 
    }, { 
     "field1": "example data", 
     "field2": "example data2", 
     "field3": "example data3", 
     "children": [{ 
      "field1": "example data", 
      "field2": "example data2", 
      "field3": "example data3", 
      "children": [] 
     }] 
    }] 
} 
+0

階層はここでは無関係です。構造内の3つの値の単純な出力は、私が必要とするものです。私はこれらの要件を反映するためにOPを更新しています。 – user0000001

答えて

2

ストリーミングAPIは、シンプルなソリューションを提供します。

+0

ストリーミングAPIを使用する利点は何ですか?メモリとCPUの面でより効率的ですか? – user0000001

+1

ストリーミングの利点は、XMLのSAX解析がDOM解析よりも優れている点です。メモリ内の未使用オブジェクトの束として日付を表すオーバーヘッドは発生しません。目的のポイントだけを処理して解析ループを終了すると、処理速度が向上します。 – DwB