【GO】Go JSON反序列化失败情况总结

时间:2025-03-08 08:03:11

Go版本: 1.17.7

源码包 encoding/json


在平时的业务开发中,经常会有拿到一串序列化后的字符串要来反序列化。反序列化的时候,有时候可能copy错误,或者自己粗心写错,导致反序列化失败。短的json还行,肉眼看下就出来,但是长的json看就会很吃力。想要通过返回的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,一般就是双引号写漏了