以下に示すようなネストされた JSON 構造が発生するシナリオを考えてみましょう。
{ "outterJSON": { "innerJSON1": { "value1": 10, "value2": 22, "InnerInnerArray": [ "test1" , "test2"], "InnerInnerJSONArray": [ {"fld1" : "val1"} , {"fld2" : "val2"} ] }, "InnerJSON2":"NoneValue" } }
タスクは、この構造を効果的に反復処理し、すべてのキーと値のペアを文字列として取得して、さらに処理することです。残念ながら、このような動的な JSON 入力の構造体を手動で定義することは現実的ではありません。
この課題を効率的に解決するために、再帰的アプローチが採用されています。
func parseMap(m map[string]interface{}) { for key, val := range m { // Check the type of the value switch concreteVal := val.(type) { case map[string]interface{}: // If it's a nested map, recursively call the function parseMap(val.(map[string]interface{})) case []interface{}: // If it's a nested array, call the function to parse the array parseArray(val.([]interface{})) default: // For all other types, print the key and value as a string fmt.Println(key, ":", concreteVal) } } }
この再帰関数 parseMap は、マップ内の各値の型を調べます。値自体がマップである場合、parseMap を再帰的に呼び出して、そのネストされたマップを走査します。値が配列の場合、parseArray を呼び出して反復処理します。他のすべての型 (文字列、数値など) の場合は、キーと値を文字列として出力するだけです。
前に提供した JSON 入力の例を考えてみましょう。以下のコードを実行すると、次の出力が生成されます:
func parseArray(a []interface{}) { for i, val := range a { // Check the type of the value switch concreteVal := val.(type) { case map[string]interface{}: // If it's a nested map, recursively call the function parseMap(val.(map[string]interface{})) case []interface{}: // If it's a nested array, call the function to parse the array parseArray(val.([]interface{})) default: // For all other types, print the index and value as a string fmt.Println("Index:", i, ":", concreteVal) } } } const input = ` { "outterJSON": { "innerJSON1": { "value1": 10, "value2": 22, "InnerInnerArray": [ "test1" , "test2"], "InnerInnerJSONArray": [{"fld1" : "val1"} , {"fld2" : "val2"}] }, "InnerJSON2":"NoneValue" } } `
出力:
//outterJSON //innerJSON1 //InnerInnerJSONArray //Index: 0 //fld1 : val1 //Index: 1 //fld2 : val2 //value1 : 10 //value2 : 22 //InnerInnerArray //Index 0 : test1 //Index 1 : test2 //InnerJSON2 : NoneValue
このアプローチは、ネストされた JSON 内のすべてのキーと値のペアを効果的にキャプチャし、処理やGo lang での抽出タスク
以上がGo でネストされた JSON を効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。