Mengapa Penyahserialisasian JSON Saya Menimbulkan Kegagalan Penegasan Antara Muka?

Mary-Kate Olsen
Lepaskan: 2024-11-27 06:41:09
asal
338 orang telah melayarinya

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

Kegagalan Penegasan Antara Muka Semasa Penyahserikatan JSON

Masalah:

Apabila cuba untuk menegaskan antara muka kepada jenis struct tertentu selepas deserializing daripada JSON, ralat dilemparkan menyatakan bahawa antara muka tidak seperti yang diharapkan taip.

Ralat Khusus:

panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Salin selepas log masuk

Butiran:

Kod cuba menyahsiri data JSON ke dalam antara muka dan kemudian menegaskan antara muka kepada struct Data. Walau bagaimanapun, pada masa jalanan, Go menjangkakan antara muka ialah [rentetan] antara muka{} peta dan bukannya objek Data.

Penyelesaian:

Penegasan Antara Muka Yang Betul:

Antara muka tidak boleh ditegaskan kepada mana-mana jenis struct sewenang-wenangnya. Ia mesti ditegaskan kepada jenis yang betul yang diwakili oleh antara muka. Dalam kes ini, antara muka hanya boleh ditegaskan kepada struct Data jika ia mula-mula diberikan nilai jenis itu.

Penyingkiran Langsung:

Untuk mengelakkan keperluan untuk penegasan antara muka, ia adalah disyorkan untuk menyahmarshal data JSON secara langsung ke dalam jenis struct yang dikehendaki. Ini memastikan bahawa data ditukar dengan betul tanpa memerlukan penegasan perantaraan.

Contoh Kod:

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)
    }
}
Salin selepas log masuk

Dengan menyahkarang data JSON secara langsung ke dalam struct AData, keperluan untuk penegasan antara muka dihapuskan, memastikan penukaran data yang betul.

Atas ialah kandungan terperinci Mengapa Penyahserialisasian JSON Saya Menimbulkan Kegagalan Penegasan Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan