Golang json.RawMessage 使用指南 - 解析和序列化 JSON 数据
json.RawMessage 是一个 Golang 类型,它实现了 json.Marshaler 和 json.Unmarshaler 接口。它可以用来将 JSON 数据解析为 Go 语言的结构体,并且可以将 Go 语言的结构体转换为 JSON 数据。
具体使用方法如下:
- 定义一个结构体:
type Person struct {
Name string 'json:"name"'
Age int 'json:"age"'
Sex string 'json:"sex"'
}
- 定义一个 JSON 字符串:
jsonStr := '{"name": "Tom", "age": 18, "sex": "male"}'
- 将 JSON 字符串解析为 RawMessage 类型:
var rawMessage json.RawMessage
rawMessage = []byte(jsonStr)
- 将 RawMessage 类型转换为结构体:
var person Person
err := json.Unmarshal(rawMessage, &person)
if err != nil {
fmt.Println("Unmarshal error:", err)
return
}
fmt.Println(person)
- 将结构体转换为 RawMessage 类型:
person := Person{
Name: "Tom",
Age: 18,
Sex: "male",
}
rawMessage, err := json.Marshal(&person)
if err != nil {
fmt.Println("Marshal error:", err)
return
}
fmt.Println(rawMessage)
注意事项:
- RawMessage 本身是一个 []byte 类型,可以直接用 []byte(jsonStr) 将 JSON 字符串转换为 RawMessage 类型;
- RawMessage 可以用于处理一些未知的 JSON 数据,比如某些字段的数据类型可能是字符串,也可能是数字,可以先将其解析为 RawMessage 类型,然后再根据具体情况进行处理;
- RawMessage 类型不能直接用于输出,需要将其转换为字符串或结构体类型。
原文地址: https://www.cveoy.top/t/topic/lD0f 著作权归作者所有。请勿转载和采集!