Golang JSON变量不加Tag 反射获取Tag

本文详细介绍了如何在Go语言中使用Unmarshal函数解析JSON数据,包括解析规则、数据类型匹配及特殊场景处理等核心内容。

JSON 解析

Unmarshal 解析 JSON 编码的数据,并将结果存入 v 指向的值。如果 v 为 nil 或不是指针,则 Unmarshal 返回 InvalidUnmarshalError。

Unmarshal 和 Marshal 做相反的操作,必要时申请 map、slice 或指针,有如下的附加规则:

  • 为了将 JSON 数据解码写入一个指针,Unmarshal 首先处理 JSON 数据为 JSON 字面值 null 的情况。此时,Unmarshal 会将指针设置为 nil。否则,Unmarshal 会将 JSON 数据解码为指针所指向的值。如果指针为 nil,则 Unmarshal 为其分配一个新值并使指针指向它。

  • 为了将 JSON 数据解码为实现 Unmarshaler 接口的值,Unmarshal 调用该值的 UnmarshalJSON 方法,包括当输入为 JSON null 时。否则,如果该值实现 encoding.TextUnmarshaler 且输入是带引号的 JSON 字符串,则 Unmarshal 会使用该字符串的未加引号形式来调用该值的 UnmarshalText 方法。

  • 要将 json 数据解码写入一个结构体,函数会匹配输入对象的键和 Marshal 使用的键(结构体字段名或者它的标签指定的键名),优先选择精确的匹配,但也接受大小写不敏感的匹配;

  • 为了将 JSON 数据解码到结构中,Unmarshal 将传入的对象键与 Marshal 使用的键(结构字段名称或其 Tag)进行匹配,希望使用精确匹配,但还接受不区分大小写的匹配。默认情况下,没有相应结构字段的对象键将被忽略(有关替代方法,请参见 Decoder.DisallowUnknownFields)。

  • 要将 JSON 数据解码写入一个接口类型值,Unmarshal 将其中之一存储在接口值中:

    Bool                   对应JSON布尔类型
    float64             
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值