我有一个看起来像这样的 JSON blob{ "metadata":{ "id":"2377f625-619b-4e20-90af-9a6cbfb80040", "from":"2014-12-30T07:23:42.000Z", "to":"2015-01-14T05:11:51.000Z", "entryCount":801, "size":821472, "deprecated":false }, "status":[{ "node_id":"de713614-be3d-4c39-a3f8-1154957e46a6", "status":"PUBLISHED" }]}我有一些代码可以将其转换回 go 结构type Status struct { status string node_id string}type Meta struct { to string from string id string entryCount int64 size int64 depricated bool}type Mydata struct { met meta stat []status}var realdata Mydataerr1 := json.Unmarshal(data, &realdata)if err1 != nil { fmt.Println("error:", err1)}fmt.Printf("%T: %+v\n", realdata, realdata)但是我运行时看到的只是一个归零结构main.Mydata: {met:{to: from: id: entryCount:0 size:0 depricated:false} stat:[]}我尝试先分配结构,但这也不起作用,我不确定为什么它不产生值,并且不返回错误
1 回答
繁星coding
TA贡献1797条经验 获得超4个赞
您的结构字段不会导出。这是因为它们以小写字母开头。
EntryCount // <--- Exported
entryCount // <--- Not exported
当我说“未导出”时,我的意思是它们在您的包裹之外是不可见的。您的包可以愉快地访问它们,因为它们在本地范围内。
至于encoding/json包裹——它看不到它们。您需要通过使所有字段encoding/json都以大写字母开头来使所有字段对包可见,从而导出它们:
type Status struct {
Status string
Node_id string
}
type Meta struct {
To string
From string
Id string
EntryCount int64
Size int64
Depricated bool
}
type Mydata struct {
Metadata Meta
Status []Status
}
See it working on the Go Playground here
您还应该参考 Golang 规范以获取答案。具体来说,是关于 Exported Identifiers 的部分。
- 1 回答
- 0 关注
- 203 浏览
添加回答
举报
0/150
提交
取消