ホームページ  >  記事  >  バックエンド開発  >  Viper および Go 構造体を使用して動的 JSON キーをアンマーシャリングするにはどうすればよいですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-20 11:33:02462ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。