ホームページ >バックエンド開発 >Golang >Go で一貫性のない JSON フィールド (文字列と配列) を処理するにはどうすればよいですか?

Go で一貫性のない JSON フィールド (文字列と配列) を処理するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-06 15:30:13213ブラウズ

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

一貫性のないフィールドを持つ JSON のアンマーシャリング: 文字列と配列の処理

JSON データを Go 構造体にアンマーシャリングする場合、フィールドの処理が困難になる場合がありますそれは種類が異なる場合があります。たとえば、フィールドはほとんどの場合文字列ですが、場合によっては文字列の配列になることがあります。この問題に取り組むために、Go の強力な JSON 解析機能を活用するソリューションを紹介します。

json.RawMessage による変動フィールドのキャプチャ

一貫性のない JSON フィールドを処理するための鍵json.RawMessage を使用して生データをキャプチャすることにあります。このタイプは、解析されていない JSON 値を格納するバイトのスライスです。生データを保存することで、特定のタイプに応じて後で柔軟に解析できるようになります。

DisplayName フィールドを非表示にし、デコード後に埋め込む

関連するデータを取得する前にデコーダが DisplayName フィールドを解釈しようとするのを防ぐため、JSON の「-」名を使用して非表示にします。この名前は、最初のアンマーシャリング中にフィールドを無視するようにデコーダーに指示します。最上位の JSON がデコードされた後、解析された生データに基づいて DisplayName フィールドに手動で入力します。

さまざまな種類の生データの処理

生データが文字列であるか文字列の配列であるかに関係なく、次のように処理します。

  • 生データの場合が文字列である場合、それを単一の文字列にアンマーシャリングし、それを DisplayName に割り当てます。
  • 生データが文字列の配列の場合、それを文字列のスライスにアンマーシャリングし、文字列を結合した後に DisplayName に保存します。

のループへの統合MyListings

MyListings などの項目のリストを処理するには、各項目を反復処理して、上記と同じアンマーシャリング ロジックを実行できます。これにより、各アイテムの DisplayName フィールドの不一致を処理できるようになります。

カスタム アンマーシャラーを使用したロジックのカプセル化

データ モデル内の複数のフィールドに不一致がある可能性がある場合型を実装する場合、json.Unmarshaler インターフェイスを実装するカスタム型にロジックをカプセル化すると有益な場合があります。これにより、プロセスが簡素化され、重複が削減されます。

結論として、json.RawMessage を採用し、可変フィールドを非表示にすることで、一貫性のないフィールドを持つ JSON データを効果的にアンマーシャリングし、必要なすべてのデータが正しくキャプチャされ、解析されるようにすることができます。提供されている例とプレイグラウンドのリンクは、実際のソリューションを示しています。

以上がGo で一貫性のない JSON フィールド (文字列と配列) を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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