golang json[]
golang 的json库利用反射机制,能很方便处理结构体与json字串之间的转换。
json数组格式:
[
{
"riskType": [
2,
3
],
"uid": "74f6881b-6e2d-4bf5-8671-f2dedd4b226c",
"level": 4,
"ip": "110.213.0.151"
},
{
"riskType": [
1,
2
],
"uid": "5ce35879-423f-4037-9551-d46e7eea3c5f",
"level": 4,
"ip": "42.234.88.4"
}
]
golang通过json库将json数组转化为结构体数组:
type RiskInfo struct {
Ip string `json:"ip"`
Level int32 `json:"level"`
RiskType []int32 `json:"riskType"`
Uid string `json:"uid"`
}
// 结构数组
var Msg2 []RiskInfo
err = json.Unmarshal([]byte(str), &Msg2)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
上述代码运行偶尔会出现无法解析的问题,报错:
err: json: cannot unmarshal string into Go struct field RiskInfo.riskType of type []int32
riskType 字段无法解析,打印出错json串,发现:
[
{
"riskType": "", // 居然为空字符串
"uid": "74f6881b-6e2d-4bf5-8671-f2dedd4b226c",
"level": 4,
"ip": "110.213.0.151"
}
]
接收到的json格式不规范,应该统一为 "riskType": [] 数组格式。针对这种非规范json格式,岂不是没解了。别急,golang 的 interface{} 可以表示任意类型。
解决方案:更换riskType为 interface{}
type RiskInfo struct {
Ip string `json:"ip"`
Level int32 `json:"level"`
RiskType interface{} `json:"riskType"` // 修改为空类型
Uid string `json:"uid"`
}
到此这篇关于“golang json[]”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
golang json[]
golang 读取 mysql null 字符串错误
Go语言中struct内部的反引号
golang json解析到map中
golang结构体tag的使用
go、golang结构体对象转Json失败原因总结
【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化
golang深度拷贝map
Mac版Sublime 配置Golang运行环境
Go Web编程--解析JSON请求和生成JSON响应