Go での異種型の配列のアンマーシャリング
キーと値のペアを処理する場合、アンマーシャリングは簡単です。ただし、混合型の配列を個別の順序でアンマーシャリングすることには課題が伴います。この問題を解決するには、さまざまなデータ型に柔軟に対応できるソリューションが必要です。
Go プログラミング言語は、このシナリオを処理するための洗練されたオプションを提供します。型アサーションと組み合わせてインターフェイス{} 型を活用することで、各配列要素の基になる型を動的に分析し、それに応じてアンマーシャリングできます。
問題のあるコードを再検討し、この手法を活用するように修正してみましょう。
package main import ( "encoding/json" "fmt" ) func decodeJSON(f interface{}) { switch vf := f.(type) { case map[string]interface{}: fmt.Println("is a map:") for k, v := range vf { checkTypeAndDecode(k, v) } case []interface{}: fmt.Println("is an array:") for k, v := range vf { checkTypeAndDecode(k, v) } } } func checkTypeAndDecode(k string, v interface{}) { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %q\n", k, vv) case int: fmt.Printf("%v: is int - %q\n", k, vv) default: fmt.Printf("%v: ", k) decodeJSON(v) } } func main() { my_json := `{ "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ] }` var f interface{} err := json.Unmarshal([]byte(my_json), &f) if err != nil { fmt.Println(err) } else { fmt.Println("JSON:") decodeJSON(f) } }
この変更されたコードは、decodeJSON 関数を使用して JSON 構造を再帰的に分析し、各要素のデータ型を識別し、適切なデータを出力します。表現。複雑なネストされた構造の場合、decodeJSON へのネストされた呼び出しが実行されます。
この改訂されたコードによって生成された出力は、各要素がデータ型に基づいてどのように正しく識別され、出力されるかを示しています。
JSON: is a map: an_array: is an array: 0: is string - "with_a string" 1: is a map: and: is string - "some_more" different: is an array: 0: is string - "nested" 1: is string - "types"
With Go での型処理の理解が深まったことで、異種混合のデータ型を含む配列を自信を持ってアンマーシャリングできるようになり、システム内での正確で一貫したデータ表現が保証されます。アプリケーション。
以上が異種のデータ型を持つ Go 配列をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。