Golang JSON: アンマーシャリングによるネストされた配列の処理
Go では、アンマーシャリング後にネストされた JSON 配列を操作する場合、エラーを理解することが重要です「タイプ インターフェイス {} はインデックス作成をサポートしていません。」このエラーは、interface{} 変数に格納されている JSON 配列内の要素にアクセスしようとすると発生します。
この問題を解決するには、型アサーションを利用して、interface{} 変数を基礎となる配列タイプ。
インターフェイス{} JSON モジュールでの表現
JSON モジュールは配列を []インターフェイス{}として表しますスライスと辞書は、interface 変数にデコードするときに、map[string]interface{} マップとしてマッピングされます。
型アサーションを使用したネストされた要素へのアクセス
エラー チェックを行わないと、次のように型アサーションを使用して JSON 配列をナビゲートできます:
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
ただし、型が一致しない場合、これらの型アサーションはパニックを起こす可能性があることに注意することが重要です。この問題を回避するには、2 つのリターン形式を使用してエラーを確認します:
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error here
}
アクセスを向上させるための構造へのデコード
JSON データが一貫した形式に従っている場合、より効率的な解決策は、それを構造化型にデコードすることです。たとえば、提供されたデータに基づきます:
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"`
}
この構造にデコードすると、result.Objects[0].ItemId を使用してアイテム ID に直接アクセスできます。このアプローチにより、型アサーションの必要性がなくなり、ネストされた要素にアクセスするための型安全なメソッドが提供されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3