Viper および Go 構造体を使用して動的 JSON キーをアンマーシャリングするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-20 11:33:02
オリジナル
464 人が閲覧しました

How do you unmarshal dynamic JSON keys with Viper and Go structs?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート