Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghuraikan JSON dengan Cekap dengan Pelbagai Jenis Mesej dalam Go?

Bagaimana untuk Menghuraikan JSON dengan Cekap dengan Pelbagai Jenis Mesej dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-21 12:02:11129semak imbas

How to Efficiently Parse JSON with Multiple Message Types in Go?

Menghuraikan JSON dalam Golang tanpa Menyahmarshaling Berlebihan

Apabila berurusan dengan data JSON yang mengandungi jenis mesej yang berbeza, unmarshaling terus ke dalam jenis struct yang diketahui mungkin tidak boleh dilaksanakan. Sebaliknya, proses dua langkah boleh digunakan untuk menyelesaikan isu ini.

Langkah 1: Unmarshal menjadi Peta Generik

Nyahmarshal objek JSON ke dalam peta generik[ string]antara muka{} untuk mendapatkan semula kunci dan nilai peringkat teratas.

Langkah 2: Kenal pasti dan Nyahmarshal Kunci Khusus

Lelaran melalui peta dan kenal pasti kunci yang sepadan dengan jenis mesej yang diingini. Contohnya:

switch k {
case "ping":
    // ...
case "ack":
    // ...
}

Untuk setiap kunci yang dikenal pasti, nyahmarshal nilai yang sepadan ke dalam json.RawMessage dan bukannya antara muka{}:

var myAck json.RawMessage

Langkah 3: Nyahmarshal ke dalam Struktur Khusus

Akhir sekali, untuk menukar RawMessage kepada yang dikehendaki struct, unmarshal terus tanpa memerlukan proses marshal/unmarshal perantaraan:

err = json.Unmarshal(myAck, &myAck)

Dengan menyahmarshal sebahagiannya ke dalam RawMessage dan mengelakkan unmarshaling berlebihan, pendekatan ini memudahkan proses dan meningkatkan kecekapan apabila menghuraikan data JSON yang kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan JSON dengan Cekap dengan Pelbagai Jenis Mesej dalam Go?. 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