Go で動的 JSON キーを構造体フィールドにアンマーシャリングする
動的 JSON キーは、静的フィールド名を持つ構造体にアンマーシャリングするときに問題が発生する可能性があります。次の JSON 構成ファイルについて考えてみましょう:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
Go 構造体でこの JSON を表すには、静的フィールド名の代わりにマップを使用できます:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
次に、JSON をアンマーシャリングします。 json.Unmarshal 関数を使用する:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
このアプローチでは、動的キーは次のキーになります。
ただし、キーが Thing 構造体のメンバーである必要がある場合は、アンマーシャリング後にキーを追加するループを作成できます。
type Thing struct { Name string `json:"-"` // add the field Key1 string Key2 string } ... // Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
このメソッドを使用すると、フィールドとしてのキーと動的な値の両方を持つことができます。
以上がGo で動的 JSON キーを構造体フィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。