Viper/JSON アンマーシャリングでの動的キーの処理
所定の形式から逸脱する JSON データを扱う場合、Go でのアンマーシャリングは困難になる可能性があります。次のような動的キーを含む JSON 構成ファイルを考えてみましょう:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
このデータを動的キーを使用して Go 構造体にアンマーシャルするには、1 つのアプローチはマップを利用することです:
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
map[string]Thing を使用すると、結果の構造体は任意の数の動的キーを処理できます。以下を使用してデータをアンマーシャリングします:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
このアプローチでは、JSON と Viper の両方で動的キーを簡単にアンマーシャリングできます (viper.Get("things") を使用して 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 }
これにより、JSON データの元の動的な性質を維持しながら、キーを構造体に組み込むことができます。
以上がGo で動的キーを使用して JSON をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。