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

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

被折叠的 条评论
为什么被折叠?



