go的json库反序列化时,会忽略未知的字段

作者:李佶澳  更新时间:2017/11/02 16:27:02

  编程    golang    刷新

目录

描述

go1.8.1,在进行json字符串的反序列化时,发现多出的字段会被忽略,而不报错。

例如,结构体定义如下:

type BackendInput struct {
	Name        string
	Type        string
	Namespace   string
	Service     string
	Podlabels   string
	Description string
	ListenerId  int
}

反序列化时输入的json字符串为:

{
  "Description": "string",
  "ListenerId": 4,
  "Namespace": "string",
  "Podlabels": "string",
  "Service": "string",
  "Type": "string",
  "namex": "string"
}

输入的json字符串中缺失了name字段,多出了一个namex字段,json.Unmarshal()不会报错,反序列化后得到的变量中的Name字段为空。

因为json的Unmarshal不会报错,所以需要开发者自己检查输入的json字符串。如果Unmarshal的时候能够做一些检查,可以减轻开发工作。

解决

github上有用户提出了建议: proposal: encoding/json: reject unknown fields in Decoder

golang已经做出了改动(golang commit 74830),增加了DisallowUnknownFields标记。

DisallowUnknownFields causes the Decoder to return an error when
the the decoding destination is a struct and the input contains
object keys which do not match any non-ignored, public field the
destination, including keys whose value is set to null.

参考

  1. proposal: encoding/json: reject unknown fields in Decoder
  2. golang commit 74830

关注加微信,一般不闲聊(直接说事)

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  微信公众号精选文章  发现知识星球