0

JsonNode ツリーを反復処理しようとしています。ルート ノードの子ノードを反復処理し、そこからテキストを取得する次のスニペットを作成しました。これはフィールド名になると想定しています。

JsonNode rootNode = new ObjectMapper().readTree(jsonParser);
for (JsonNode node : rootNode){
    String fieldName = node.asText(); // <- is it safe to assume this?
    JsonNode value =  node.get(fieldName);
}

私はこの同様の投稿を読みましたが、受け入れられた答えは単純に機能しません。なぜなら、私fields知る限り、ループを単独で繰り返すことができないためです。fieldNamesiteratorforeach

他の最も支持された答えは機能しますが、上記のスニペットの仮定がまだ有効かどうか疑問に思っていました.

4

1 に答える 1

1

いいえ。

JsonNode#iterator()状態の javadoc

elements();便利な「for-each」ループを使用して JSON 配列構造の要素をループできるように実装された呼び出しと同じです。

そしてJsonNode#elements()州のjavadoc

このノードが JSON 配列またはオブジェクト ノードである場合に、このノードのすべての値ノードにアクセスするためのメソッド。Object ノードの場合、フィールド名 (キー) は含まれず、値のみが含まれます。他のタイプのノードの場合、空の反復子を返します。

したがって、返される要素は、オブジェクト ノードの各キーと値のペアの値です。配列ノードの場合は、配列要素です。

于 2016-08-11T00:52:25.590 に答える