2015-08-08 45 views
-1

我試圖從一個文件讀取並將其加載到一個結構片。我讀入的行加載正確,如塊註釋中所示。Unmarshal()返回空結構

我遇到的問題是class變量不斷返回空值。我究竟做錯了什麼?

func loadClasses(path string) []Class { 
    var a []Class 

    inFile, _ := os.Open(path) 
    defer inFile.Close() 
    scanner := bufio.NewScanner(inFile) 
    scanner.Split(bufio.ScanLines) 
    var class Class 
    for scanner.Scan() { 
     var err = json.Unmarshal(scanner.Bytes(), &class) 

     if err != nil { 
      fmt.Print("Error:", err) 
     } else { 
      a = append(a, class) 
     } 
    } 
    return a 
} 

type Class struct { 
    id string 
    name string 
} 

/* 
Sample contents 
"{"id":124997,"name":"Environmental Sciences"} 
{"id":123905,"name":"Physical Education"} 
{"id":127834,"name":"Mandarin"} 
{"id":123507,"name":"Biology"} 
{"id":123883,"name":"German"} 
{"id":129148,"name":"German"} 
{"id":123545,"name":"Spanish"}" 

*/ 

謝謝isim的幫助。我的問題是兩個部分,該結構成員必須予以資本化,我錯過了json: "id"json: "name"

+1

嘗試通過將'id'和'name'的第一個字母大寫,在'Class'中輸出字段。 –

+0

如果解決了您的問題,請考慮將答案標記爲已接受。謝謝。 –

+0

重複的http://stackoverflow.com/questions/26327391/golang-json-marshalstruct-returns –

回答

4

您可以通過更改字段的第一個字母大寫這樣導出您Class結構中的字段:

type Class struct{ 
    Id string 
    Name string 
} 

或者,您也可以添加標籤領域是這樣的:

type Class struct{ 
    Id string `json: "id"` 
    Name string `json: "name"` 
} 
json包如何處理編碼和解碼

的更多信息,可以發現分別在json.Marshaljson.Unmarshal文檔中。

+0

關閉:第二個將無法正常工作,因爲'反映',因此'encoding/json'根本無法看到字段小寫名稱。您希望使用第一個代碼片段中的字段名稱,但使用結構標籤表示它們應該使用輸入中的小寫鍵名填充。 – twotwotwo

+0

@twotwotwo固定。謝謝! –