Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahseri Berbilang Jenis Mesej JSON dengan Cekap dalam Go Websocket Menggunakan json.RawMessage?

Bagaimana untuk Menyahseri Berbilang Jenis Mesej JSON dengan Cekap dalam Go Websocket Menggunakan json.RawMessage?

Patricia Arquette
Patricia Arquetteasal
2024-11-24 03:51:14899semak imbas

How to Deserialize Multiple JSON Message Types Efficiently in Go Websocket Using json.RawMessage?

Go Websocket: Penyahserialisasian Pelbagai Jenis Mesej JSON Menggunakan json.RawMessage

Apabila bekerja dengan soket web Gorilla, mengendalikan mesej JSON yang masuk daripada pelbagai jenis boleh memberikan cabaran. Menggunakan kaedah ReadJSON untuk setiap jenis secara berasingan boleh menyusahkan. Artikel ini meneroka penyelesaian yang menggunakan jenis json.RawMessage untuk mengendalikan penyahserikatan dengan cekap.

Masalah:

Bagaimanakah kita boleh menyahsiri mesej JSON yang masuk ke dalam struktur berbeza berdasarkan medan kawalan dalam JSON, tanpa menggunakan berbilang ReadJSON panggilan?

Penyelesaian:

Tentukan struktur pembalut Mesej dengan medan Kawalan untuk menunjukkan jenis data sebenar dan medan X jenis json.RawMessage untuk dipegang data bersiri.

type Messages struct {
    Control string          `json:"control"`
    X       json.RawMessage `json:"X"`
}

Nyahkawal mesej JSON yang masuk ke dalam Messages struct.

var m Messages
err := c.ReadJSON(&m)

Periksa medan Kawalan untuk menentukan jenis data sebenar. Nyahmarshal medan X ke dalam struct yang sesuai.

switch m.Control {
case "Foo":
    var foo Foo
    if err := json.Unmarshal([]byte(m.X), &foo); err != nil {
       // handle error
    }
    // do something with foo

case "Bar":
   ... follow pattern for Foo
}

Menggunakan json.RawMessage membenarkan pendekatan generik untuk menyahsiri mesej masuk daripada jenis yang berbeza, memudahkan pengendalian berbilang jenis mesej dalam aplikasi soket web.

Atas ialah kandungan terperinci Bagaimana untuk Menyahseri Berbilang Jenis Mesej JSON dengan Cekap dalam Go Websocket Menggunakan json.RawMessage?. 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