2015-07-10 153 views
2

我正在将一些JSON解码到一个结构中,并且我想处理未提供特定字段的情况。检查一个地图是否在Golang中初始化

结构:

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

另外,使用'err:= json.Unmarshal([] byte(input),output)更简单。如果err!= nil {return err}'。 –

回答

8

任何地图的zero valuenil,所以只是对证:

if output.Servers == nil { /* ... */ } 

另外,您还可以检查它的长度。这也处理了空地图的情况:

if len(output.Servers) == 0 { /* ... */ } 
+0

当然!现在我想起来很简单,哈哈! – shearn89

相关问题