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
}`
looking for beginning of object key string
问题:key都没有双引号
某个key:value后面缺少一个逗号
`{
"Vint":1
"Vstring": "test"
"Vfloat": 15.15
}`
invalid character '\"' after object key:value pair
问题:value后面得有逗号
"}"前不能有逗号
`{
"Vint":1,
"Vstring": "test",
"Vfloat": 15.15,
}`
invalid character '}' looking for beginning of object key string
问题:最后一个key:value不需要跟着逗号
类型赋值错误
`{
"Vint":"1",
"Vstring": "test",
"Vfloat": 15.15
}`
string into Go struct field
问题:数据类型是int的,但是给的是字符串。这个问题是特例,类型赋值错误的场景也比较多。
key没有对应的value
`{
"Vint:1",
"Vstring": "test",
"Vfloat": 15.15
}`
invalid character ',' after object key
问题:Vint:1是key,没有跟上value,一般就是双引号写漏了