解組後在Golang 中存取巢狀JSON 陣列
在Golang 中處理JSON 回應時,您可能會在存取巢狀JSON 元素時遇到困難大批。當嘗試存取「物件」數組中的特定元素時,可能會發生這種情況,從而導致類似「類型介面 {} 不支援索引」的錯誤。
錯誤原因
出現這個錯誤是因為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中文網其他相關文章!