猿问

json.Unmarshal 返回空白结构

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

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


犯罪嫌疑人X
浏览 204回答 1
1回答

繁星coding

您的结构字段不会导出。这是因为它们以小写字母开头。EntryCount // <--- ExportedentryCount // <--- Not exported当我说“未导出”时,我的意思是它们在您的包裹之外是不可见的。您的包可以愉快地访问它们,因为它们在本地范围内。至于encoding/json包裹——它看不到它们。您需要通过使所有字段encoding/json都以大写字母开头来使所有字段对包可见,从而导出它们:type Status struct {&nbsp; &nbsp; Status&nbsp; string&nbsp; &nbsp; Node_id string}type Meta struct {&nbsp; &nbsp; To&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string&nbsp; &nbsp; From&nbsp; &nbsp; &nbsp; &nbsp;string&nbsp; &nbsp; Id&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string&nbsp; &nbsp; EntryCount int64&nbsp; &nbsp; Size&nbsp; &nbsp; &nbsp; &nbsp;int64&nbsp; &nbsp; Depricated bool}type Mydata struct {&nbsp; &nbsp; Metadata&nbsp; Meta&nbsp; &nbsp; Status []Status}See it working on the Go Playground here您还应该参考 Golang 规范以获取答案。具体来说,是关于 Exported Identifiers 的部分。
随时随地看视频慕课网APP

相关分类

Go
我要回答