我将一些JSON解码为结构体,并且我想处理未提供特定字段的情况。
STRUCT:
type Config struct {
SolrHost string
SolrPort int
SolrCore string
Servers map[string][]int
}
要解码的JSON:
{
"solrHost": "localhost",
"solrPort": 8380,
"solrCore": "testcore",
}
在解码JSON的方法中,我想检查map[string][]int
是否已初始化,如果没有,请执行此操作。
当前代码:
func decodeJson(input string, output *Config) error {
if len(input) == 0 {
return fmt.Errorf("empty string")
}
decoder := json.NewDecoder(strings.NewReader(input))
err := decoder.Decode(output)
if err != nil {
if err != io.EOF {
return err
}
}
// if output.Server.isNotInitialized...
return nil
}
我可以使用recover()
吗?这是"最好的"如何实现我的任务?
答案 0 :(得分:10)
任何地图的zero value都是nil
,所以请检查一下:
if output.Servers == nil { /* ... */ }
或者,您也可以检查其长度。这也处理空映射的情况:
if len(output.Servers) == 0 { /* ... */ }