問題:
嘗試斷言特定結構類型的介面時從 JSON反序列化時,會拋出錯誤,指出介面不是預期的type.
特定錯誤:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
詳細資料:
詳細資訊:詳細資料: 詳細資料: 詳細資料:
程式碼嘗試將JSON 資料反序列化到介面中然後斷言資料結構的介面。然而,在執行時,Go 希望介面是一個 map[string]interface{},而不是一個 Data 物件。
type Data struct { Content string Links []string } func main() { var AData Data // Deserialize JSON directly into the Data struct err = json.Unmarshal([]byte(value), &AData) if err != nil { panic(err) } }
解:
正確的介面斷言:介面不能斷言為任何任意結構類型。必須將它們斷言為介面表示的正確類型。在這種情況下,只有首先為資料結構分配了該類型的值,介面才能被斷言。 直接解組:為了避免介面斷言的需要,它是建議直接將 JSON 資料解組為所需的結構類型。這可確保資料正確轉換,無需中間斷言。 程式碼範例:透過直接將 JSON 資料解組到 AData 結構中,消除了對介面斷言的需要,確保正確的資料轉換。以上是為什麼我的 JSON 反序列化會拋出介面斷言失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!