Представьте, что у нас есть следующие структуры 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 без ошибок и выяснить, какие поля были проигнорированы)