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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-01 19:25:20309ブラウズ

How to Unmarshal JSON with Dynamic Keys in Go?

Viper/JSON アンマーシャリングでの動的キーの処理

所定の形式から逸脱する JSON データを扱う場合、Go でのアンマーシャリングは困難になる可能性があります。次のような動的キーを含む JSON 構成ファイルを考えてみましょう:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}

このデータを動的キーを使用して Go 構造体にアンマーシャルするには、1 つのアプローチはマップを利用することです:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

map[string]Thing を使用すると、結果の構造体は任意の数の動的キーを処理できます。以下を使用してデータをアンマーシャリングします:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

このアプローチでは、JSON と Viper の両方で動的キーを簡単にアンマーシャリングできます (viper.Get("things") を使用して 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
}

これにより、JSON データの元の動的な性質を維持しながら、キーを構造体に組み込むことができます。

以上がGo で動的キーを使用して JSON をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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