json.RawMessage 是一个 Golang 类型,它实现了 json.Marshaler 和 json.Unmarshaler 接口。它可以用来将 JSON 数据解析为 Go 语言的结构体,并且可以将 Go 语言的结构体转换为 JSON 数据。

具体使用方法如下:

  1. 定义一个结构体:
 type Person struct {
     Name string 'json:"name"'
     Age  int    'json:"age"'
     Sex  string 'json:"sex"'
 }
  1. 定义一个 JSON 字符串:
 jsonStr := '{"name": "Tom", "age": 18, "sex": "male"}'
  1. 将 JSON 字符串解析为 RawMessage 类型:
 var rawMessage json.RawMessage
 rawMessage = []byte(jsonStr)
  1. 将 RawMessage 类型转换为结构体:
 var person Person
 err := json.Unmarshal(rawMessage, &person)
 if err != nil {
     fmt.Println("Unmarshal error:", err)
     return
 }
 fmt.Println(person)
  1. 将结构体转换为 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 类型不能直接用于输出,需要将其转换为字符串或结构体类型。
Golang json.RawMessage 使用指南 - 解析和序列化 JSON 数据

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

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