Golang JSON:透過解組處理巢狀數組
在Go 中,解組後處理嵌套錯誤至關重要「類型介面{}不支援索引。」當您嘗試存取儲存在interface{}變數中的JSON陣列中的元素時,會發生此錯誤。
要解決此問題,您需要利用型別斷言將interface{}變數轉換為底層陣列類型。
Interface{} JSON 模組中的表示
JSON 模組將陣列表示為[]interface{} 切片,將字典表示為map[string]interface{ }解碼為interface{} 變數時映射。
使用型別斷言存取巢狀元素
無需錯誤檢查,您可以使用類型斷言導覽JSON 數組,如下所示:
<code class="go">objects := result["objects"].([]interface{}) first := objects[0].(map[string]interface{}) fmt.Println(first["ITEM_ID"])</code>
但是,請務必注意,如果類型不匹配,這些類型斷言可能會出現恐慌。為了避免此問題,您可以使用兩次返回表單並檢查錯誤:
<code class="go">objects, ok := result["objects"].([]interface{}) if !ok { // Handle error here }</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 直接存取項目 ID。這種方法消除了對類型斷言的需要,並提供了一種用於存取巢狀元素的類型安全方法。
以上是如何在 Go JSON 解組中處理巢狀數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!