Go では、構造体フィールド内で動的 JSON キーを処理するのが難しい場合があります。これを詳しく調べて、Viper ライブラリを使用した包括的なソリューションを提供しましょう。
問題ステートメント
動的キーを含む JSON 構成ファイルを考えてみましょう:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
この構成を構造体に解析するには、次のようにします。定義:
type Thing struct { Name string `?????` Key1 string `json:"key2"` Key2 string `json:"key2"` }
しかし、次のような疑問が生じます: 動的キーを構造体フィールド名としてアンマーシャルするにはどうすればよいでしょうか?
解決策
を処理するには動的キーの場合は、マップの使用を検討してください:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
Unmarshal例:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
プレイグラウンドの例
キーが構造体のメンバーである必要がある場合は、アンマーシャリング後にループを使用してキーを追加できます。
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 }
遊び場例
これらの手法を使用すると、Viper などのライブラリを使用している場合でも、動的 JSON キーを Go の構造体フィールドに効果的にアンマーシャリングできます。
以上がGo で動的 Viper キーまたは JSON キーを構造体フィールドとしてアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。