gpt4 book ai didi

json.Unmarshal 返回空白结构

转载 作者:行者123 更新时间:2023-12-01 22:25:26 24 4
gpt4 key购买 nike

我有一个看起来像这样的 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 Mydata
err1 := 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:[]}

我尝试先分配结构,但这也没有用,我不确定它为什么不产生值,也不返回错误

最佳答案

您的结构字段未导出。这是因为它们以小写字母开头。

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 规范以获得答案。具体来说, the part that talks about Exported Identifiers .

关于json.Unmarshal 返回空白结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60195196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com