ホームページ  >  記事  >  バックエンド開発  >  アンマーシャリング時に Go で複数の JSON 形式をどのように処理しますか?

アンマーシャリング時に Go で複数の JSON 形式をどのように処理しますか?

DDD
DDDオリジナル
2024-10-26 12:30:03182ブラウズ

How Do You Handle Multiple JSON Formats in Go When Unmarshaling?

Go でアンマーシャリングを使用した複数の JSON 形式の処理

異なる形式で JSON を返すサードパーティ API を使用する場合、困難になる可能性がありますGo のさまざまな構造を処理します。よくある課題の 1 つは、「メッセージ」フィールドに文字列または配列を含む応答を処理することです。

簡単なアプローチ

基本的なアプローチには、形式ごとに個別の構造体:

<code class="go">type ResponseWithString struct {
    Message string `json:"message"`
}

type ResponseWithArray struct {
    Message []string `json:"message"`
}</code>

その後、JSON を両方の構造体に連続してデコードしてみることができます。最初の試行 (文字列を使用) が失敗した場合は、2 回目の試行 (配列を使用) を試行します。

より洗練された解決策

より洗練されたアプローチは、次のとおりです。任意のタイプの値を保持できるインターフェース タイプ。{} JSON をインターフェイス{} 型の変数にアンマーシャリングすることで、その型を動的にチェックし、それに応じて応答できます。

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}

func main() {
    ...
    var r Response
    ...
    switch x := r.Message.(type) {
        case string:
            // Handle string message
        case []interface{}:
            // Handle array message
    }
}</code>

デフォルトでは、JSON 配列は []interface{} にアンマーシャリングされることに注意してください。型アサーションを使用して文字列と配列を区別できます。

このアプローチでは、単一の構造体で複数の JSON 形式を処理できるため、柔軟性とコードの再利用性が向上します。

以上がアンマーシャリング時に Go で複数の JSON 形式をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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