ホームページ >バックエンド開発 >Golang >任意のキーと値のペアを含む JSON を Go 構造体にアンマーシャリングするにはどうすればよいですか?

任意のキーと値のペアを含む JSON を Go 構造体にアンマーシャリングするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-30 06:45:281067ブラウズ

How Can I Unmarshal JSON with Arbitrary Key/Value Pairs into a Go Struct?

任意のキー/値ペアを含む JSON を構造体にアンマーシャリングする

問題ステートメント

目的は、既知のキーと値のペアが混在している JSON 文字列をアンマーシャリングすることです。および不明なキーと値のペアを Go 構造体に追加します。既知のフィールドは特定の構造体フィールドにアンマーシャリングする必要がありますが、未知のフィールドは構造体内のキーと値のペアのコレクションとして保存する必要があります。

解決策

これを実現するには、構造体で次のことができます。既知のフィールドとマップのスライスの組み合わせで定義できます:

<code class="go">type Message struct {
    Known1 string `json:"known1"`
    Known2 string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>

アンマーシャリング プロセス

この JSON 文字列:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>

は次を使用してアンマーシャリングできます。手順:

  1. メッセージ構造体のインスタンスを作成します。
  2. JSON 文字列を構造体にアンマーシャリングします。
  3. アンマーシャリング後に生の JSON オブジェクトを反復処理し、不明なフィールドのキーと値。
  4. 各不明なキーと値のペアを新しいマップに保存し、それを構造体の Unknowns フィールドに追加します。

代替ソリューション

構造体を使用する代わりに、JSON をマップ[文字列]インターフェース{}に直接アンマーシャリングすることもできます。これにより、すべてのキーと値のペアに動的コレクションとしてアクセスできるようになります。

<code class="go">var msg map[string]interface{}
json.Unmarshal([]byte(jsonMsg), &msg)</code>

結論

構造体を使用するかマップを使用するかの選択は、アプリケーションの特定の要件によって異なります。事前に定義された既知のフィールドと構造化されたアプローチが必要な場合は、構造体が適しています。未知のフィールドの正確な性質が事前にわからない場合、またはより柔軟な動的なデータ構造が必要な場合は、マップが実行可能なオプションです。

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

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