golang json.RawMessage 如何使用
json.RawMessage 是 Go 语言中的一个类型,用于表示未解析的 JSON 数据。使用 json.RawMessage 可以在不解析 JSON 数据的情况下,将其传递到下游处理函数中,以提高性能和减少内存消耗。
以下是使用 json.RawMessage 的示例代码:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Extra json.RawMessage `json:"extra"`
}
func main() {
data := []byte(`
{
"name": "John",
"age": 30,
"extra": {
"email": "john@example.com",
"phone": "1234567890"
}
}
`)
var person Person
err := json.Unmarshal(data, &person)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// 使用 RawMessage 提取 extra 字段的值
var extraMap map[string]string
err = json.Unmarshal(person.Extra, &extraMap)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Email:", extraMap["email"])
fmt.Println("Phone:", extraMap["phone"])
}
在上面的示例中,Person 结构体中的 Extra 字段类型为 json.RawMessage。使用 json.Unmarshal 函数解析 JSON 数据时,Extra 字段的值也会被解析为 json.RawMessage 类型的数据。
在输出 Name 和 Age 字段的值后,我们可以使用 json.Unmarshal 函数和一个 map[string]string 类型的变量来提取 Extra 字段的值。由于 Extra 字段的值为未解析的 JSON 数据,我们需要将其传递给 json.Unmarshal 函数以解析其内容。解析后的值将保存在 extraMap 变量中,我们可以通过键名来访问它们。
这就是如何使用 json.RawMessage 在 Go 语言中处理未解析的 JSON 数据的方法。
原文地址: https://www.cveoy.top/t/topic/r4k 著作权归作者所有。请勿转载和采集!