ホームページ  >  記事  >  バックエンド開発  >  Go でアンマーシャリングするときに多様な JSON 形式を処理するにはどうすればよいですか?

Go でアンマーシャリングするときに多様な JSON 形式を処理するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 23:55:30252ブラウズ

How Can I Handle Diverse JSON Formats When Unmarshalling in Go?

多様な JSON 形式を処理するためのアンマーシャルの適応

外部 API にアクセスするとき、開発者はさまざまな JSON 応答形式に遭遇することが多く、データをアンマーシャリングする際に課題が生じます。一貫した構造。 Go では、いくつかのテクニックを使用してこれらの違いを適切に処理することができます。

文字列「メッセージ」またはエラー コードの配列として、JSON メッセージを 2 つの形式で返す API エンドポイントの例を見てみましょう。 「エラーコード」]。このバリエーションを管理するには、応答を保持するカスタム構造体を定義できます。

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

Message フィールドをインターフェイス タイプとして設定することにより、Go の動的型付けシステムはさまざまなデータ タイプを格納できるようになります。この柔軟性により、さまざまな応答形式を処理するための開始点が提供されます。

JSON を Response 構造体にアンマーシャルするには、json.Unmarshal の呼び出しが使用されます。ただし、Message フィールドはさまざまなタイプを保持できるため、JSON が配列 (エラー応答) を表す場合には特殊なケースが発生します。デフォルトでは、JSON 配列は []interface{} 型の値にアンマーシャリングされます。

この区別を処理する鍵は、アンマーシャリングされた Message フィールドの型を調べることにあります。これは、以下に示すように、型アサーションまたは型スイッチを使用して実現できます。

<code class="go">    switch x := r.Message.(type) {
    case string:
        fmt.Println("Success, message:", x)
    case []interface{}:
        fmt.Println("Error, code:", x)
    default:
        fmt.Println("Something else:", x)
    }</code>

このスニペットでは、r.Message の型が検査されます。文字列の場合は、成功メッセージを示します。インターフェイスのスライスの場合は、エラー コードを含むエラー応答を表します。それ以外の場合、予期しない応答とみなされます。

この手法を利用することで、開発者はさまざまな形式の JSON 応答を効率的に統合された構造体にアンマーシャリングでき、メッセージ タイプに基づいた後続の処理と意思決定が可能になります。

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

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