写点什么

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

作者:非晓为骁
  • 2022 年 9 月 27 日
    福建
  • 本文字数:735 字

    阅读完需:约 2 分钟

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

用户头像

非晓为骁

关注

no pain no gain 2019.04.10 加入

用我的勤奋,一点一点地努力,提升自己的能力,拓展自己的视野,提高自己的认知。 我的知乎:https://www.zhihu.com/people/zhengfke

评论

发布
暂无评论
【GO】Go JSON反序列化失败情况总结_Go_非晓为骁_InfoQ写作社区