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 数据的方法。

golang json.RawMessage 如何使用

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

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