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

アンマーシャリング後に Golang でネストされた JSON 配列にアクセスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 18:54:02431ブラウズ

How to Access Nested JSON Arrays in Golang After Unmarshalling?

アンマーシャリング後の Golang でのネストされた JSON 配列へのアクセス

Golang で JSON 応答を操作する場合、ネストされた JSON の要素にアクセスする際に問題が発生する場合があります。配列。これは、「objects」配列内の特定の要素にアクセスしようとすると発生する可能性があり、「type Interface {} はインデックス付けをサポートしていません。」のようなエラーが発生します。

エラーの原因

このエラーは、Go のインターフェイス変数がインデックス作成をサポートしていないために発生します。 JSON ペイロードをインターフェイス変数にデコードすると、JSON モジュールは配列を []interface{} スライスとして表し、辞書を map[string]interface{} マップとして表します。

解決策 1: 型アサーションを使用する

「objects」配列内の特定の要素にアクセスするには、型アサーションを使用してインターフェイス変数を具象型に変換できます。ただし、このアプローチでは、型アサーションが失敗した場合に対処するためにエラー チェックが必要です。

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>

解決策 2: 構造体へのデコード

JSON ペイロードに既知の形式の場合、より堅牢な解決策は、それをカスタム構造に直接デコードすることです。これにより、型アサーションやエラー処理の必要性を排除し、予想される構造を定義できるようになります。

<code class="go">type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

var result Result
if err := json.Unmarshal(payload, &result); err != nil {
    panic(err)
}
fmt.Println(result.Objects[0].ItemId)</code>

特定のユースケースに基づいて適切なソリューションを選択することで、後で Golang のネストされた JSON 配列にシームレスにアクセスできます。アンマーシャリング中。

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

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