Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Unmarshal Data JSON dengan Jenis Pembolehubah: Rentetan atau Susunan Rentetan?

Bagaimana untuk Unmarshal Data JSON dengan Jenis Pembolehubah: Rentetan atau Susunan Rentetan?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 02:58:02365semak imbas

How to Unmarshal JSON Data with Variable Types: String or Array of Strings?

Menyahkod JSON dengan Struktur Varian

Titik akhir yang anda gunakan mengembalikan JSON dalam pelbagai format, kadangkala sebagai rentetan dan masa lain sebagai tatasusunan. Untuk mengendalikan ketidakkonsistenan ini, soalan berikut meneroka pendekatan terbaik untuk mereka bentuk struct Go yang boleh menampung kedua-dua jenis.

Soalan:

Bagaimana saya boleh mencipta Go struct yang boleh menyahmarshal data JSON dengan jenis pembolehubah, sama ada rentetan atau tatasusunan rentetan? Adakah terdapat penyelesaian yang elegan selain daripada percubaan untuk menyahkod kepada dua struct berasingan?

Jawapannya:

Pendekatan yang lebih canggih melibatkan pembongkaran JSON ke dalam jenis antara muka{}. Pendekatan jenis-agnostik ini membenarkan pengendalian dinamik jenis nilai yang berbeza.

Untuk melaksanakan teknik ini, cipta satu struct dengan medan antara muka jenis{}, seperti yang ditunjukkan dalam contoh berikut:

<code class="go">type Response struct {
    Message interface{} `json:"message"`
}</code>

Apabila menyahmarshaling data JSON ke dalam struct ini, anda boleh menggunakan suis jenis atau penegasan jenis untuk menentukan jenis sebenar medan Mesej. Ini membolehkan anda memproses data dengan sewajarnya.

Berikut ialah contoh pelaksanaan:

<code class="go">func main() {
    inputs := []string{
        `{"message":"Message"}`,
        `{"message":["ERROR_CODE"]}`,
    }

    for _, input := range inputs {
        var r Response
        if err := json.Unmarshal([]byte(input), &r); err != nil {
            panic(err)
        }
        switch x := r.Message.(type) {
        case string:
            fmt.Println("Success, message:", x)
        case []interface{}:
            fmt.Println("Error, code:", x)
        default:
            fmt.Println("Something else:", x)
        }
    }
}</code>

Output:

Success, message: Message
Error, code: [ERROR_CODE]

Dengan menggunakan antara muka{} pendekatan, anda memperoleh fleksibiliti dalam mengendalikan data JSON dengan pelbagai jenis, memudahkan pangkalan kod anda.

Atas ialah kandungan terperinci Bagaimana untuk Unmarshal Data JSON dengan Jenis Pembolehubah: Rentetan atau Susunan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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