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

作者: 李佶澳   转载请保留:原文地址   更新时间:2017/11/02 16:27:02

描述

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

本文原创首发于网站:www.lijiaocn.com

可以加微信,需备注姓名和方向

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: lijiaocn@foxmail.com,备注网站合作 友情链接: lijiaocn github.com