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,一般就是双引号写漏了