Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahkod Separa dan Mengemas kini Data JSON dalam Pergi Tanpa Kehilangan Medan Tidak Diketahui?

Bagaimana untuk Menyahkod Separa dan Mengemas kini Data JSON dalam Pergi Tanpa Kehilangan Medan Tidak Diketahui?

Patricia Arquette
Lepaskan: 2024-12-24 20:44:17
asal
682 orang telah melayarinya

How to Partially Decode and Update JSON Data in Go Without Losing Unknown Fields?

Menyahkod Separa dan Mengemas kini JSON dalam Go

Apabila bekerja dengan data JSON, kadangkala perlu mengubah suai nilai tertentu sahaja tanpa kehilangan struktur sedia ada. Ini boleh mencabar jika anda tidak mengetahui keseluruhan struktur objek JSON kerana pengekodan/pakej json Go memotong medan yang tidak disertakan dalam struct sasaran.

Artikel ini meneroka teknik yang memanfaatkan gabungan struct biasa dan json.RawMessage untuk mencapai penyahkodan separa dan mengemas kini tanpa kehilangan maklumat yang tidak diketahui.

Separa Penyahkodan

Kunci kepada penyahkodan separa adalah untuk menyimpan keseluruhan data JSON dalam medan mentah (cth., map[string]json.RawMessage) dan secara selektif nyahmarshal medan khusus ke dalam struct anda. Begini caranya:

import "encoding/json"

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    if space, ok := c.raw["Space"]; ok {
        if err := json.Unmarshal(space, &c.Space); err != nil {
            return err
        }
    }
    return nil
}
Salin selepas log masuk

Di sini, UnmarshalJSON mendapatkan semula keseluruhan data JSON ke dalam c.raw, kemudian menyahmarshal medan Angkasa ke dalam c.Space.

Mengubah suai Medan Diketahui

Setelah anda menyahkod sebahagian data JSON, anda boleh mengubah suai medan tertentu sebagai diperlukan.

Marshaling dan Memelihara

Selepas mengubah suai medan anda yang diketahui, anda perlu menyusun semula struct Warna yang dikemas kini kepada JSON. Untuk mengekalkan struktur sedia ada dan mengelakkan pemotongan, anda menulis kaedah MarshalJSON tersuai anda:

func (c *Color) MarshalJSON() ([]byte, error) {
    bytes, err := json.Marshal(c.Space)
    if err != nil {
        return nil, err
    }
    c.raw["Space"] = json.RawMessage(bytes)
    return json.Marshal(c.raw)
}
Salin selepas log masuk

Dalam MarshalJSON, anda mengawal medan Angkasa yang diubah suai, kemudian membenamkannya semula ke dalam peta mentah sebelum melakukan marshalling terakhir.

Kesimpulan

Teknik ini membolehkan anda mengubah suai nilai tertentu dalam data JSON tanpa kehilangan maklumat yang tidak diketahui, menjadikan ia sesuai untuk senario di mana struktur JSON penuh tidak tersedia atau tertakluk kepada perubahan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahkod Separa dan Mengemas kini Data JSON dalam Pergi Tanpa Kehilangan Medan Tidak Diketahui?. 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