Go JSON反序列化失败情况及解决过程
作者:非晓为骁
这段描述主要讲解了Go语言中`encoding/json`包在反序列化JSON字符串时可能出现的问题及,包括缺少双引号、逗号位置错误以及类型赋值错误等
Go JSON反序列化失败情况
Go版本: 1.17.7
源码包 encoding/json
- 在平时的业务开发中,经常会有拿到一串序列化后的字符串要来反序列化。
- 反序列化的时候,有时候可能copy错误,或者自己粗心写错,导致反序列化失败。
- 短的json还行,肉眼看下就出来,但是长的json看就会很吃力。
- 想要通过json.Unmarshal返回的err看错误信息,又比较难理解其意义,就这个问题做一个总结示例。
下面示例正确的要用来反序列化的如下:
type A struct {
Vint int
Vstring string
Vfloat float64
}
`{
"Vint":1,
"Vstring": "test",
"Vfloat":15.15
}`
某个key缺少双引号
`{
Vint:1
Vstring: "test"
Vfloat: 15.15
}`
json.Unmarshal报错返回包含:
looking for beginning of object key string
问题:key都没有双引号
某个key:value后面缺少一个逗号
`{
"Vint":1
"Vstring": "test"
"Vfloat": 15.15
}`
json.Unmarshal报错返回包含:
invalid character '\"' after object key:value pair
问题:value后面得有逗号
"}"前不能有逗号
`{
"Vint":1,
"Vstring": "test",
"Vfloat": 15.15,
}`
json.Unmarshal报错返回包含:
invalid character '}' looking for beginning of object key string
问题:最后一个key:value不需要跟着逗号
类型赋值错误
`{
"Vint":"1",
"Vstring": "test",
"Vfloat": 15.15
}`
json.Unmarshal报错返回包含:
string into Go struct field
问题:数据类型是int的,但是给的是字符串。这个问题是特例,类型赋值错误的场景也比较多。
key没有对应的value
`{
"Vint:1",
"Vstring": "test",
"Vfloat": 15.15
}`
json.Unmarshal报错返回包含:
invalid character ',' after object key
问题:Vint:1是key,没有跟上value,一般就是双引号写漏了
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
