猿问

使用结构解析 JSON

我正在尝试使用 Go 解析 JSON。谁能告诉我为什么我的代码没有按预期工作?


package main

  

import (

    "encoding/json"

    "fmt"

)

type Message struct {

    Name string

    Body string

    Time int64

}


type Person struct {

    M Message

}


func get_content() {


    body := []byte(`{"person":{"Name":"Alice","Body":"Hello","Time":1294706395881547000}}`)


    var data Person

    err := json.Unmarshal(body, &data)

    if err != nil {

        panic(err.Error())

    }

    fmt.Printf("%v",data.M.Name)


}


func main() {

    get_content()

}


我期待它打印名称。


莫回无
浏览 160回答 3
3回答

哔哔one

这是将 JSON 解组到结构的方法。你可以在 Go Playground 上查看:package mainimport (    "encoding/json"    "fmt")type Message struct {    Name string    Body string    Time int64}type Person struct {    M Message}func get_content() {    body := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)    var data Person    err := json.Unmarshal(body, &data.M)    if err != nil {        panic(err.Error())    }    fmt.Printf(data.M.Name)}func main() {    get_content()}替换data为data.M下一行。err := json.Unmarshal(body, &data)

holdtom

只要您打算将 Json 键映射到其字段具有不同名称的结构上,您就应该添加标签:    type Message struct {        Name string `json:"Name"`        Body string `json:"Body"`        Time int64  `json:"Time"`    }    type Person struct {        M Message `json:"person"`    }

慕无忌1623718

代码中有两个问题。第一个是上面提到的@umar-hayat -> 您正在解组到data对象中,您应该瞄准该data.M领域。第二个问题是您的 JSON 结构与您的结构不匹配。您Person有一个名为M. 如果我们想将其表示为 JSON,它将如下所示:{  "M": {    "Name": "Joe",    "Body": "Hi",    "time": 2600  }}相反,您在 JSON 中调用person了一个字段,该字段无法与结构中的任何字段匹配。恐怕它与结构类型的名称相似这一事实在任何方面都没有帮助。因此,您可以更改 JSON 和目标:    body := []byte(`{"Name":"Alice","Body":"Hello","Time":1294706395881547000}`)    var data Person    err := json.Unmarshal(body, &data.M)或者只是你的 JSON:    body := []byte(`{"M":{"Name":"Alice","Body":"Hello","Time":1294706395881547000}}`)    var data Person    err := json.Unmarshal(body, &data)但是,JSON 中的字段名称必须与结构中的字段名称相匹配。或者,正如 Konstantinos 所提到的,您可以使用标签来指定特定名称,您的结构的字段将使用这些名称在 JSON 中表示。您可能会发现这很有帮助:https ://gobyexample.com/json
随时随地看视频慕课网APP

相关分类

Go
我要回答