ホームページ > バックエンド開発 > Golang > Go で動的 Viper キーまたは JSON キーを構造体フィールドとしてアンマーシャリングする方法

Go で動的 Viper キーまたは JSON キーを構造体フィールドとしてアンマーシャリングする方法

Barbara Streisand
リリース: 2024-11-20 15:30:13
オリジナル
499 人が閲覧しました

How to Unmarshal Dynamic Viper or JSON Keys as Struct Fields in Go?

Go で動的 Viper キーまたは JSON キーを構造体フィールドとしてアンマーシャリングする

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

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