首頁  >  文章  >  後端開發  >  為什麼我的 JSON 反序列化會拋出介面斷言失敗?

為什麼我的 JSON 反序列化會拋出介面斷言失敗?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-27 06:41:09335瀏覽

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

JSON 反序列化期間介面斷言失敗

問題:

嘗試斷言特定結構類型的介面時從 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn