ホームページ >バックエンド開発 >Golang >構造を知らずにネストされた JSON をアンマーシャリングするにはどうすればよいですか?

構造を知らずにネストされた JSON をアンマーシャリングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-04 12:01:29195ブラウズ

How to Unmarshal Nested JSON without Knowing its Structure?

構造を知らずにネストされた JSON をアンマーシャルする

さまざまなスキーマを持つ JSON ドキュメントを含む Key-Value ストアを操作する場合、次のことが困難になります。構造を事前に知らなくても、JSON データを特定の構造体にアンマーシャリングします。この記事では、この問題に対処し、解決策を提案する方法を検討します。

方法 1: インターフェイスへのアンマーシャル

不明な構造を持つ JSON ドキュメントを処理するには、それらをアンマーシャルして、インターフェイス タイプ(map[string]interface{} など)。これにより、特定の構造体を定義する必要なく、基になるデータに辞書としてアクセスできるようになります。

トップレベルの foo 名前空間を map[string]*json.RawMessage にアンマーシャリングすることで、ネストされた JSON を取得できます。データ。ただし、構造体に正しくアンマーシャリングするには、foo 名前空間内のデータの型を判断する必要があります。

方法 2: 正規表現型の抽出

代替案この方法では、JSON データから型文字列を抽出し、正規表現を使用して構造体の型を決定します。型がわかったら、json.RawMessage を適切な構造体にアンマーシャルできます。

繰り返しのアンマーシャル

繰り返しのアンマーシャルが問題となるかどうかは、次のパフォーマンス要件によって異なります。あなたのアプリケーション。速度が重要な場合は、中間インターフェイスを使用する代わりに、特定の構造体に直接アンマーシャリングする方が効率的である可能性があります。ただし、小規模なデータセットやたまにしか使用しない場合、パフォーマンスの低下はそれほど大きくない可能性があります。

更新

提供された更新に基づいて、2 つの可能な解決策が提案されます。

a) コピーとアンマーシャル

  • json.RawMessage のコピーを作成します。
  • コピーをインターフェイスにアンマーシャルします。
  • 型がわかったら、元の json.RawMessage を適切な構造体にアンマーシャルします。

b) 正規表現とアンマーシャル

  • 正規表現を使用して型文字列を抽出します。
  • 抽出された型文字列に基づいて構造体型をプログラム的に作成します。
  • 新しく作成された構造体に json.RawMessage をアンマーシャルします。

以上が構造を知らずにネストされた JSON をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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