Go で JSON 応答を操作する場合、ネストされた配列内の要素にアクセスすると問題が発生する可能性があります。多くの場合、特定のデータ ポイントを取得しようとすると、「タイプ インターフェイス {} はインデックス作成をサポートしていません」などのエラーが発生します。
これを解決するには、Go の JSON 応答の基本的な性質を理解することが重要です。デフォルトでは、配列は []interface{} スライスとして表され、辞書は map[string]interface{} マップとしてキャストされます。その結果、インターフェイス変数はインデックス付けをサポートしていません。
ネストされた要素にアクセスするには、型アサーションが必要になります。 1 つの方法は、エラー チェックを行わずに次の操作を実行することです。
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
ただし、この方法では、型が一致しない場合にパニックが発生する可能性があります。より堅牢なアプローチは、2 つの戻り値を使用して潜在的なエラーを処理することです:
<code class="go">objects, ok := result["objects"].([]interface{}) if !ok { // Handle error }</code>
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"` }</code>
デコードされると、result.Objects[0].ItemId.
などのネストされた要素にシームレスにアクセスできます。以上がGo で入れ子になった JSON 配列に安全にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。