Viper および Go 構造体を使用した動的 JSON キーのアンマーシャリング
Go では、動的キーを使用した JSON データの処理が困難な場合があります。たとえば、名前が異なるキーを含むオブジェクトを含む JSON 構成ファイルがある場合、このデータを Go 構造体にアンマーシャリングするにはどうすればよいですか?
次の JSON 構成ファイルを例に挙げてみましょう:
{ "things" :{ "123abc" :{ "key1": "anything", "key2" : "more" }, "456xyz" :{ "key1": "anything2", "key2" : "more2" }, "blah" :{ "key1": "anything3", "key2" : "more3" } } }
これに対処するには、この更新された Go 構造体に示すように、マップを利用して動的キーを表すことができます。
type X struct { Things map[string]Thing } type Thing struct { Key1 string Key2 string }
構造体を定義したら、次のような JSON データ:
var x X if err := json.Unmarshal(data, &x); err != nil { // handle error }
オブジェクト キーの名前が "Thing" 構造体のフィールドである必要がある場合は、アンマーシャリング後にそれを割り当てるループを追加できます:
// Fix the name field after unmarshal for k, t := range x.Things { t.Name = k x.Things[k] = t }
または、カスタム JSON デコーダーを使用して、「Decode」メソッドをオーバーライドすることで動的キーを処理することもできます。このアプローチの詳細については、Go の公式ドキュメントを参照してください。
これらの手法を使用すると、動的 JSON キーを Go 構造体に効果的にアンマーシャリングでき、複雑な構成ファイルやデータ構造を操作できるようになります。
以上がViper および Go 構造体を使用して動的 JSON キーをアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。