Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Pulangan Tatasusunan Pembolehubah Apabila Menyahmarshall JSON dalam Go?

Bagaimana Mengendalikan Pulangan Tatasusunan Pembolehubah Apabila Menyahmarshall JSON dalam Go?

Susan Sarandon
Lepaskan: 2024-12-12 12:49:10
asal
247 orang telah melayarinya

How to Handle Variable Array Returns When Unmarshalling JSON in Go?

Menyahmarshall JSON dengan Variable Array Return

Apabila mendapatkan JSON daripada sumber luaran, struktur respons boleh berbeza-beza, menjadikannya mencabar untuk unmarshal ke dalam struct Go tetap. Ini amat ketara apabila JSON mungkin mengandungi tatasusunan atau objek tunggal untuk sifat yang sama.

Dalam contoh yang disediakan, respons JSON mengandungi sifat yang dipanggil "gwrcmd" yang boleh menjadi tatasusunan objek atau objek tunggal. Untuk menangani ini, satu pendekatan melibatkan mencipta struct kedua dengan medan yang sama seperti yang asal tetapi dengan kepingan untuk sifat "gwrcmd". Walau bagaimanapun, penyelesaian yang lebih fleksibel boleh dicapai menggunakan json.RawMessage.

json.RawMessage membenarkan unmarshalling jenis yang tidak diketahui ke dalam rentetan JSON mentah. Ciri ini boleh digunakan untuk mengintip ke dalam JSON dan menentukan cara yang sesuai untuk menyahmarselingnya ke dalam jenis Go yang sepadan.

Pertimbangkan contoh mudah berikut:

type Response struct {
    RawAWrapper struct {
        RawA json.RawMessage `json:"a"`
    }
    A  A   `json:"-"`
    As []A `json:"-"`
}

type A struct {
    B string
}

func (r *Response) UnmarshalJSON(b []byte) error {
    if err := json.Unmarshal(b, &r.RawAWrapper); err != nil {
        return err
    }
    if r.RawAWrapper.RawA[0] == '[' {
        return json.Unmarshal(r.RawAWrapper.RawA, &r.As)
    }
    return json.Unmarshal(r.RawAWrapper.RawA, &r.A)
}
Salin selepas log masuk

Dalam contoh ini, json.RawMessage medan RawA menangkap nilai JSON bagi sifat "a". Berdasarkan bait pertama JSON mentah, kita boleh menentukan sama ada nilai itu ialah tatasusunan ([]) atau objek ("{"). Maklumat ini kemudiannya digunakan untuk menyahmarshal nilai ke dalam sama ada struct A (untuk objek) atau kepingan As (untuk tatasusunan).

Pendekatan ini menyediakan cara yang lebih fleksibel dan mantap untuk mengendalikan respons JSON dengan struktur berubah-ubah. Ia menghapuskan keperluan untuk struktur pendua dan membolehkan unmarshalling dinamik berdasarkan kandungan JSON.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Pulangan Tatasusunan Pembolehubah Apabila Menyahmarshall JSON 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