Go では、JSON データをインターフェースにアンマーシャリングするという課題に直面するとき、{}特定のキーに基づいてさまざまなデータ型を処理します。この記事では、この問題に対処し、JSON を Go の汎用インターフェースにアンマーシャリングするソリューションを提供します。
次の構造体を持つ Message という型があるシナリオを考えてみましょう。{} Cmd フィールド (文字列) と Data フィールド (interface{})。特定のデータ構造を定義するネストされたタイプ CreateMessage もあります。 '{"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}' などの JSON データをアンマーシャリングするときに、次のような問題が発生します。 Data フィールドが適切な CreateMessage タイプに正しく変換されない問題。
この問題に対処するには、次の方法を採用します。アプローチ:
例を示します。解決策を示すコード スニペット:
type Message struct { Cmd string `json:"cmd"` Data json.RawMessage } type CreateMessage struct { Conf map[string]int `json:"conf"` Info map[string]int `json:"info"` } func main() { var m Message if err := json.Unmarshal(data, &m); err != nil { log.Fatal(err) } switch m.Cmd { case "create": var cm CreateMessage if err := json.Unmarshal([]byte(m.Data), &cm); err != nil { log.Fatal(err) } fmt.Println(m.Cmd, cm.Conf, cm.Info) default: log.Fatal("bad command") } }
このアプローチを活用すると、JSON データを適切なデータ構造に動的にアンマーシャリングでき、Go でバリアント JSON データを柔軟に処理できるようになります。
以上がGo で JSON データを動的にジェネリック型にアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。