Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyahkod Separa dan Mengemas kini JSON dalam Go Semasa Memelihara Medan Tidak Diketahui?

Bagaimanakah Saya Boleh Menyahkod Separa dan Mengemas kini JSON dalam Go Semasa Memelihara Medan Tidak Diketahui?

Patricia Arquette
Lepaskan: 2024-12-31 10:28:10
asal
487 orang telah melayarinya

How Can I Partially Decode and Update JSON in Go While Preserving Unknown Fields?

Penyahkodan Separa dan Kemas Kini JSON dalam Go

Apabila bekerja dengan objek JSON, mungkin perlu menyahkod nilai tertentu sahaja sambil mengekalkan yang tidak diketahui bahagian objek. Pakej pengekodan/json dalam Go, bagaimanapun, cenderung untuk memotong medan yang tidak terdapat dalam struct, yang membawa kepada kehilangan data apabila pengekodan semula.

A Penyelesaian

Kepada mengatasi masalah ini, gabungan struct mudah dan json.RawMessage boleh digunakan untuk mengekalkan yang tidak diketahui medan.

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}
Salin selepas log masuk

Dalam struct ini, medan mentah menyimpan keseluruhan objek JSON sebagai RawMessage. Apabila menyahkod, kaedah UnmarshalJSON membaca medan mentah untuk mengekstrak nilai tertentu ke dalam medan yang ditentukan struct.

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

Begitu juga, apabila pengekodan, kaedah MarshalJSON menyerikan medan Angkasa dan mengemas kini peta mentah dengan bait yang dikodkan .

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

Pendekatan ini membenarkan penyahkodan separa dan pengemaskinian medan tertentu, sementara mengekalkan bahagian objek JSON yang tidak diketahui.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahkod Separa dan Mengemas kini JSON dalam Go Semasa Memelihara 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