Go で動的 JSON キーを構造体フィールドにアンマーシャリングする方法

Patricia Arquette
リリース: 2024-11-19 01:26:02
オリジナル
883 人が閲覧しました

How to Unmarshal Dynamic JSON Keys into Struct Fields in Go?

Go で動的 JSON キーを構造体フィールドにアンマーシャリングする

動的 JSON キーは、静的フィールド名を持つ構造体にアンマーシャリングするときに問題が発生する可能性があります。次の JSON 構成ファイルについて考えてみましょう:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}
ログイン後にコピー

Go 構造体でこの JSON を表すには、静的フィールド名の代わりにマップを使用できます:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}
ログイン後にコピー

次に、JSON をアンマーシャリングします。 json.Unmarshal 関数を使用する:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}
ログイン後にコピー

このアプローチでは、動的キーは次のキーになります。

ただし、キーが Thing 構造体のメンバーである必要がある場合は、アンマーシャリング後にキーを追加するループを作成できます。

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
}
ログイン後にコピー

このメソッドを使用すると、フィールドとしてのキーと動的な値の両方を持つことができます。

以上がGo で動的 JSON キーを構造体フィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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