Golang json.RawMessage 使用指南:解析复杂 JSON 数据
在 Golang 中,json.RawMessage 是一种特殊的 JSON 数据类型,它可以存储未经解析的 JSON 字符串,常用于处理复杂的 JSON 数据。下面是一个示例,展示如何使用 json.RawMessage。
package main
import (
"encoding/json"
"fmt"
)
func main() {
// 定义一个 JSON 字符串
data := `{\n "name": "Tom",\n "age": 18,\n "address": {\n "city": "Beijing",\n "country": "China"\n }\n }`
// 定义一个结构体
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
Address json.RawMessage `json:"address"`
}
// 解析 JSON 字符串
var p Person
err := json.Unmarshal([]byte(data), &p)
if err != nil {
fmt.Println("解析 JSON 失败:", err)
return
}
// 输出解析后的结果
fmt.Println("Name:", p.Name)
fmt.Println("Age:", p.Age)
// 使用 RawMessage 解析 Address 字段
var address map[string]string
err = json.Unmarshal(p.Address, &address)
if err != nil {
fmt.Println("解析 Address 字段失败:", err)
return
}
fmt.Println("City:", address["city"])
fmt.Println("Country:", address["country"])
}
在这个示例中,我们使用 json.RawMessage 类型处理 Address 字段。首先解析整个 JSON 字符串,获得一个 Person 对象,然后使用 RawMessage 解析 Address 字段,得到一个 map[string]string 类型的对象,包含 city 和 country 两个字段。
需要注意的是,使用 RawMessage 解析 JSON 数据时,需要手动处理解析后的数据,因为 RawMessage 只是一个未经解析的 JSON 字符串,需根据具体业务逻辑进行处理。
原文地址: https://www.cveoy.top/t/topic/lAuJ 著作权归作者所有。请勿转载和采集!