gpt4 book ai didi

go - 使用struct解析JSON

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

我正在尝试使用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()
}

我希望它可以打印名称。
Go playground Code

最佳答案

代码中有两个问题。

第一个是上面提到的@ umar-hayat->您正在整理到data对象中,并且您应该针对data.M字段。

第二个问题是JSON的结构与结构的结构不匹配。您的Person有一个名为M的字段。如果我们想将其表示为JSON,则如下所示:

{
"M": {
"Name": "Joe",
"Body": "Hi",
"time": 2600
}
}

相反,您的JSON中有一个名为 person的字段,该字段无法与结构中的任何字段匹配。恐怕它与struct的类型名称相似的事实无济于事。

因此,您可以更改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

关于go - 使用struct解析JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60355189/

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