ホームページ > バックエンド開発 > Golang > Go で第 2 レベルのネストされた JSON を効率的に反復するにはどうすればよいですか?

Go で第 2 レベルのネストされた JSON を効率的に反復するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-30 18:23:17
オリジナル
921 人が閲覧しました

How to Efficiently Iterate Through Second-Level Nested JSON in Go?

Go での第 2 レベルのネストされた JSON のループ/反復

この質問では、Go で複雑なネストされた JSON 構造を反復処理することについて、特に焦点を当てます。ネストの 2 番目のレベル。 JSON 入力には複数レベルのネストされたオブジェクトと配列が含まれており、タスクはこれらのネストされた構造内のキーと値のペアにアクセスして処理することです。

JSON と初期ループの解析

提供されたコードは、encoding/json パッケージを使用して JSON 入力を解析して、map[string]interface{} オブジェクトに入れます。このマップは、JSON 階層の最上位を表します。 range` ループを使用して、マップ内の第 1 レベルのキーと値のペアを反復処理します。

for firstLvlkey, firstLvlValue := range m {
    // process first-level key and value...
}
ログイン後にコピー

第 2 レベルの反復: カスタマイズ

第 1 レベルのループでは、コードは、innerJSON1 や InnerJSON2 など、第 2 レベルのネストされた JSON オブジェクトを反復しようとします。これを実現するには、各第 1 レベルのキーのインターフェース値をチェックし、それに応じて処理する必要があります。

これを処理する効率的な方法は、タイプ アサーションを使用し、タイプ スイッチを使用してインターフェースのタイプを決定することです。{ } 価値。ネストされたマップまたは配列に対して parseMap 関数または parseArray 関数を再帰的に呼び出すことにより、コードは JSON 構造のすべてのレベルを繰り返し探索できます。

func parseMap(aMap map[string]interface{}) {
    for key, val := range aMap {
        switch concreteVal := val.(type) {
            case map[string]interface{}:
                // Nested map
                fmt.Println(key)
                parseMap(val.(map[string]interface{}))
            case []interface{}:
                // Nested array
                fmt.Println(key)
                parseArray(val.([]interface{}))
            default:
                // Primitive value
                fmt.Println(key, ":", concreteVal)
        }
    }
}

func parseArray(anArray []interface{}) {
    for i, val := range anArray {
        switch concreteVal := val.(type) {
            case map[string]interface{}:
                // Nested map
                fmt.Println("Index:", i)
                parseMap(val.(map[string]interface{}))
            case []interface{}:
                // Nested array
                fmt.Println("Index:", i)
                parseArray(val.([]interface{}))
            default:
                // Primitive value
                fmt.Println("Index", i, ":", concreteVal)
        }
    }
}
ログイン後にコピー

サンプル出力

Based提供された入力 JSON に対して、コードはキーと値のペアを JSON の第 2 レベルから出力します。ネスティング:

InnerInnerJSONArray
Index: 0
fld1 : val1
Index: 1
fld2 : val2
value1 : 10
value2 : 22
InnerInnerArray
Index 0 : test1
Index 1 : test2
InnerJSON2 : NoneValue
ログイン後にコピー

追加の考慮事項

  • 提供されたコードは、JSON 構造が整形式であることを前提とし、無効な JSON 入力を処理しません。
  • 型リフレクション (interface{}) を使用すると、型付き構造体を使用する場合と比較して、プログラムにオーバーヘッドが追加される可能性があります。
  • より複雑な JSON 構造やパフォーマンスの最適化については、Go の json.Decoder を使用し、JSON 階層を手動で移動することを検討してください。

以上がGo で第 2 レベルのネストされた JSON を効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート