Go Websocket:使用json.RawMessage 反序列化多種JSON 訊息類型
使用Gorilla websocket 時,處理傳入的多種類型的JSON 訊息可以提出挑戰。分別對每種類型使用 ReadJSON 方法可能會很麻煩。本文探討了一種利用 json.RawMessage 類型高效處理反序列化的解決方案。
問題:
我們如何根據JSON 中的控製字段,無需使用多個ReadJSON
解決方案:
解決方案:type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
var m Messages err := c.ReadJSON(&m)解決方案:
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 }
解決方案:
解決方案:解決方案:解:定義一個包裝結構Messages,其中包含一個Control欄位來指示實際資料的類型,以及一個 json.RawMessage 類型的 X 欄位來保存序列化資料。 將傳入的 JSON 訊息解組到訊息中struct.檢查 Control 欄位以確定資料的實際類型。將 X 字段解組到適當的結構中。 使用 json.RawMessage 允許使用通用方法來反序列化不同類型的傳入訊息,從而簡化 Websocket 應用程式中多種訊息類型的處理。以上是如何在 Go Websocket 中使用 json.RawMessage 高效反序列化多個 JSON 訊息類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!