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.