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

Tags: 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],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球