在golang的json unmarshal上获得可以为空的对象

时间:2016-12-06 11:13:16

标签: json parsing go struct

  

Go code(jsonTestParse.go)

     

(这只是我做的一个测试例子,请不要争辩我应该    使用cls struct中的学生列表

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "os"
)

type student struct {
    ID       string `json:"id"`
    Name     string `json:"name"`
    Standard string `json:"std"`
}

type cls struct {
    st student `json:"cls"`
}

func getValues() (cls, error) {
    var clss cls
    dataBytes, err := ioutil.ReadFile("studentclass.json")
    if err != nil {
        fmt.Printf("File error: %v\n", err)
        os.Exit(1)
    }
    err = json.Unmarshal(dataBytes, &clss)
    if err != nil {
        fmt.Errorf("%s", err)
    }
    return clss, err
}

func main() {
    s, err := getValues()
    fmt.Printf("%#v\n", s)
    fmt.Println(err)
}
  

Json File(studentclass.json)

{
    "cls": {
        "id": "1",
        "name": "test",
        "std": "0"
    }
}

当我使用go run jsonTestParse.go运行此代码时,它会给我输出结果:

main.cls{st:main.student{ID:"", Name:"", Standard:""}}
<nil>

请帮助我为什么我得到这个空白对象

main.cls{st:main.student{ID:"", Name:"", Standard:""}}

而不是

main.cls{st:main.student{ID:"1", Name:"test", Standard:"0"}}

另外,如何获得这些价值会很有帮助?

1 个答案:

答案 0 :(得分:3)

这是因为您的 cls 结构嵌入了学生 st的私有结构(小写未导出字段),对导出字段的更改应该有效,即:

type cls struct {
    // St field will be unmarshalled
    St student `json:"cls"`
}

playground