在 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 字符串,需根据具体业务逻辑进行处理。

Golang json.RawMessage 使用指南:解析复杂 JSON 数据

原文地址: https://www.cveoy.top/t/topic/lAuJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录