在 Go 中将 JSON 数据解析为 Map
Websocket 服务器经常接收包装在键值对中的 JSON 数据,这些数据指示值的类型。虽然“encoding/json”包提供了方便的解组功能,但需要将 JSON 数据部分解析为映射以进行进一步处理。
使用 map[string]json.RawMessage 的方法
要实现部分解组,可以使用 map[string]json.RawMessage。这种方法允许将 JSON 数据解组到映射中,键是属性名称,值是未解析的 JSON 数据。
import ( "encoding/json" "fmt" ) func main() { data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`) var objmap map[string]json.RawMessage err := json.Unmarshal(data, &objmap) if err != nil { fmt.Printf("Error unmarshaling JSON: %v", err) return } // Unpack Individual Values // Parsing sendMsg var s sendMsg err = json.Unmarshal(objmap["sendMsg"], &s) if err != nil { fmt.Printf("Error unmarshaling 'sendMsg': %v", err) return } fmt.Println("sendMsg:", s) // Parsing say var str string err = json.Unmarshal(objmap["say"], &str) if err != nil { fmt.Printf("Error unmarshaling 'say': %v", err) return } fmt.Println("say:", str) } type sendMsg struct { User string Msg string }
在这种方法中,objmap 将包含一个键“sendMsg” " 其值是表示 sendMsg 对象的原始 JSON 数据。通过进一步将此数据解组到 sendMsg 结构中,可以访问各个字段(User 和 Msg)。
注意: 为了确保成功解组,请记住导出 sendMsg 结构中的字段(即用户和消息)。
以上是如何在 Go 中高效解析部分 JSON 映射?的详细内容。更多信息请关注PHP中文网其他相关文章!