2014-10-31 102 views
1

我試圖分析在golang一個節點的package.json文件,我有以下結構:拆封頂層JSON對象

type packageJson struct { 
    scripts   map[string]interface{} `json:"scripts"` 
    dependencies map[string]interface{} `json:"dependencies"` 
    devDependencies map[string]interface{} `json:"devDependencies"` 
} 

... 

var content packageJson 
if err := json.Unmarshal(b, &content); err != nil { 
    return err 
} 

當我解析但是包文件的結構沒有被填充(雖然沒有收到錯誤)。我懷疑這是因爲內容本身就是一個對象(即:{ "scripts":"...", ... }),Unmarshal方法想將其轉換爲map[string]interface{}。任何建議如何解決這個「問題」?我試圖創建一個包裝結構,並使用jpath但無濟於事。謝謝!

注:我能做到這一點

var content map[string]interface{} 
... 
if val, ok := content["scripts"]; !ok { ... } 

,但我想如果可能的話,以避免它。

回答

3

你應該公開struct字段。

+0

我認爲知名度並不重要,但我想這是因爲Unmarshal需要一個指針並且超出範圍。它現在有效!謝謝。 – morcmarc 2014-10-31 16:37:15

+1

這是因爲未導出的字段不能被任何其他包訪問,即使是反射。 – Matt 2014-10-31 18:23:04

+0

可見性至關重要,因爲unmarshaller使用反射,只是不能訪問私人領域。這裏有一些關於這個問題的討論:http://stackoverflow.com/questions/11126793/golang-json-and-dealing-with-unexported-fields – 2014-10-31 20:42:00