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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-20 15:30:13535ブラウズ

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 までご連絡ください。