想象一下,我们有以下 Go 结构:
type Config struct {
Name string `json:"name,omitempty"`
Params []Param `json:"params,omitempty"`
}
type Param struct {
Name string `json:"name,omitempty"`
Value string `json:"value,omitempty"`
}
和以下json:
{
"name": "parabolic",
"subdir": "pb",
"params": [{
"name": "input",
"value": "in.csv"
}, {
"name": "output",
"value": "out.csv",
"tune": "fine"
}]
}
我们进行解组:
cfg := Config{}
if err := json.Unmarshal([]byte(cfgString), &cfg); err != nil {
log.Fatalf("Error unmarshalling json: %v", err)
}
fmt.Println(cfg)
https://play.golang.org/p/HZgo0jxbQrp
输出将是{parabolic [{input in.csv} {output out.csv}]}
有意义的 - 未知字段被忽略。
问题:如何找出哪些字段被忽略了?
即getIgnoredFields(cfg, cfgString)
会回来["subdir", "params[1].tune"]
(有一个DisallowUnknownFields
选项,但有所不同:此选项会导致Unmarshal
错误,而问题是如何仍然解析 json 而没有错误并找出哪些字段被忽略)