golang-不固定格式的json

在处理不固定格式的JSON字符串时,由于无法预先定义结构体,Golang中可以使用json.RawMessage来保存原始字节数据,以便后续进行解析。json.RawMessage实际上是一个[]byte类型的别名,方便对不确定结构的JSON进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当json字符串没有固定格式时,反序列化不好定义与其相对应的结构体,此时应使用json.RawMessage将原始字节数据保存下来,再做进一步解析。json.RawMessage其实是[]byte的声明。如:

package main

import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Name string `json:"name"`
	Age  int    `json:"age,string"`
}

func main() {

	schoolStr := `{"student":{"name":"jack","age":"20"},"teacher":"lucy"}`

	var result map[string]json.RawMessage
	if err := json.Unmarshal([]byte(schoolStr), &result); err != nil {
		fmt.Printf("json.Unmarshal schoolStr err: %v\n", err)
		return
	}

	var s Student
	if err := json.Unmarshal(result["student"], &s); err != nil {
		fmt.Printf("json.Unmarshal result['student' err: %v\n]", err)
		return
	}
	fmt.Printf("s: %#v\n", s)
	fmt.Printf("s.Age type: %T\n", s.Age)
}

输出:

s: main.Student{Name:"jack", Age:20}
s.Age type: int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值