在 Go 中存取巢狀 JSON 陣列
在 Go 中,解組後存取巢狀 JSON 陣列時會出現挑戰。當嘗試從回應中的「objects」陣列中擷取元素時,可能會遇到錯誤「type interface {} does not support indexing」。
理解問題
預設情況下,Go 中的JSON 模組將陣列表示為[]interface{} 切片,將字典表示為map[string]interface{ } 映射。因此,當解碼為interface{}變數時,直接使用索引存取嵌套元素將會失敗。
解決方案:類型斷言
解決此問題的一種方法是透過類型斷言。這涉及將 interface{} 變數轉換為底層具體類型。例如,要從「objects」陣列中的第一個物件中提取ITEM_ID:
<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 type conversion error }</code>
解碼為結構
對於已知格式的 JSON 建議的替代解決方案是直接解碼為自訂結構。定義一個結構體來匹配 JSON 結構,並解碼為它:
<code class="go">type Result struct { Query string Count int Objects []struct { ItemId string ProdClassId string Available int } }</code>
這允許您直接存取數據,無需類型斷言:
<code class="go">var result Result json.Unmarshal(payload, &result) fmt.Println(result.Objects[0].ItemId)</code>
以上是如何在 Go 中存取巢狀 JSON 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!