Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Melaksanakan Penegasan Jenis pada Data JSON yang Tidak Dimarshaled dalam Go?

Bagaimana untuk Melaksanakan Penegasan Jenis pada Data JSON yang Tidak Dimarshaled dalam Go?

Susan Sarandon
Lepaskan: 2024-12-25 09:28:28
asal
977 orang telah melayarinya

How to Perform Type Assertions on Unmarshaled JSON Data in Go?

Taip Penegasan dengan Data Tidak Dimarshaled

Dalam sistem teragih, data sering ditukar sebagai rentetan JSON. Apabila mendapatkan semula data JSON daripada baris gilir mesej, anda mungkin menghadapi senario di mana anda perlu menyahsiri data ke dalam antara muka{} dan kemudian melakukan penegasan jenis untuk menentukan jenis struktur sebenar data.

Masalah

Apabila membuka rentetan JSON yang diterima ke dalam antara muka{} dan cuba menaip menegaskan hasilnya, anda mungkin menghadapi hasil yang tidak dijangka. Daripada jenis struct yang dijangkakan, anda memperoleh peta[rentetan]antara muka{}.

Penyelesaian

Tingkah laku lalai JSON unmarshaling ke dalam antara muka{} menghasilkan jenis seperti bool, float64, rentetan, []antara muka{} dan peta[rentetan]antara muka{}. Memandangkan Something1 dan Something2 ialah struct tersuai, ia tidak dikenali oleh JSON unmarshaler.

Untuk menyelesaikannya, terdapat dua pendekatan utama:

1. Unmarshal Terus ke dalam Struktur Tersuai

Kod:

var input Something1
json.Unmarshal([]byte(msg), &input)
// Type assertions and processing can be performed here

var input Something2
json.Unmarshal([]byte(msg), &input)
// Type assertions and processing can be performed here
Salin selepas log masuk

2. Nyahpek daripada Antara Muka Peta

Kod:

var input interface{}
json.Unmarshal([]byte(msg), &input)

// Unpack the data from the map
switch v := input.(type) {
case map[string]interface{}:
    // Extract the data from the map and assign it to custom structs
}
Salin selepas log masuk

Pendekatan Lanjutan

Untuk penyelesaian yang lebih serba boleh, pertimbangkan untuk mencipta struct "Unpacker" yang mengendalikan penegasan unmarshaling dan jenis proses.

Kod:

type Unpacker struct {
    Data       interface{}
}

func (u *Unpacker) UnmarshalJSON(b []byte) error {
    smth1 := &Something1{}
    err := json.Unmarshal(b, smth1)
    if err == nil && smth1.Thing != "" {
        u.Data = smth1
        return nil
    }

    smth2 := &Something2{}
    err = json.Unmarshal(b, smth2)
    if err != nil {
        return err
    }

    u.Data = smth2
    return nil
}
Salin selepas log masuk

Kesimpulan

Dengan menggunakan salah satu pendekatan ini, anda boleh melakukan jenis penegasan pada data yang mula-mula dibongkar ke dalam antara muka{} daripada rentetan JSON. Pilihan pendekatan bergantung pada keperluan khusus permohonan anda.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Penegasan Jenis pada Data JSON yang Tidak Dimarshaled dalam Go?. 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