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"}}
另外,如何获得这些价值会很有帮助?
答案 0 :(得分:3)
这是因为您的 cls 结构嵌入了学生 st
的私有结构(小写未导出字段),对导出字段的更改应该有效,即:
type cls struct {
// St field will be unmarshalled
St student `json:"cls"`
}