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