アンマーシャリング後の 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 サイトの他の関連記事を参照してください。