JSON 反序列化中介面斷言失敗
在這種情況下,在反序列化後嘗試將介面斷言為特定結構類型時會出現問題JSON 資料。錯誤訊息表示預期的物件類型是 map[string]interface{},但實際物件是 Data 類型的自訂結構體。
說明
介面斷言允許將介面值轉換為特定型別。但是,確保介面的基礎值實際上與目標類型匹配至關重要。在這種情況下,介面資料包含一個具有巢狀欄位的複雜對象,而 main.Data 是一個簡單的結構。因此,對 Data 類型的斷言無效。
解決方案
要解決此問題,方法是確保介面資料與目標結構匹配,或在執行斷言之前動態檢查資料類型。
直接反序列化
對於直接反序列化,可以使用以下方法:
var result Data err := json.Unmarshal(data, &result) if err != nil { // Handle error }
此方法直接將JSON 資料反序列化為Data struct,無需介面斷言。
介面檢查和斷言
或者,如果您需要執行介面斷言,則應先確定基礎值的類型正確:
result, ok := anInterface.(Data) if !ok { // Handle type mismatch error }
此檢查可確保僅執行有效的類型轉換,從而防止執行階段錯誤。
以上是為什麼我的 JSON 反序列化會導致介面斷言失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!