Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Pergi Mengendalikan Penyahkodan dan Kemas Kini JSON Separa dengan Cekap?

Bagaimanakah Pergi Mengendalikan Penyahkodan dan Kemas Kini JSON Separa dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-12-27 09:06:14508semak imbas

How Can Go Handle Partial JSON Decoding and Updates Efficiently?

Mengendalikan Penyahkodan dan Kemas Kini JSON Separa dalam Go

Dalam kes di mana struktur objek JSON adalah dinamik, pembongkaran JSON tradisional boleh menyebabkan kehilangan data akibat pemangkasan medan. Untuk menangani perkara ini, pertimbangkan penyelesaian yang menggabungkan struct biasa dengan json.RawMessage, yang membenarkan kemas kini terpilih sambil mengekalkan maklumat yang tidak diketahui.

Struktur Warna menggambarkan pendekatan ini:

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

Semasa JSON unmarshalling, kaedah UnmarshalJSON membaca keseluruhan data menjadi mentah dan mendapatkan semula medan yang diingini (cth., Space) daripada mentah jika wujud:

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    // ...
    return nil
}

Untuk JSON marshalling, kaedah MarshalJSON meletakkan semula medan yang diingini menjadi mentah, memastikan medan yang dikemas kini disertakan dalam output:

func (c *Color) MarshalJSON() ([]byte, error) {
    // ...
    return json.Marshal(c.raw)
}

Ini pendekatan membenarkan kemas kini medan terpilih sambil mengekalkan seluruh data JSON, termasuk struktur yang tidak diketahui atau dinamik.

Atas ialah kandungan terperinci Bagaimanakah Pergi Mengendalikan Penyahkodan dan Kemas Kini JSON Separa dengan Cekap?. 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