3 回答
TA贡献1854条经验 获得超8个赞
这是将 JSON 解组到结构的方法。你可以在 Go Playground 上查看:
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(`{"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)
TA贡献1805条经验 获得超10个赞
只要您打算将 Json 键映射到其字段具有不同名称的结构上,您就应该添加标签:
type Message struct {
Name string `json:"Name"`
Body string `json:"Body"`
Time int64 `json:"Time"`
}
type Person struct {
M Message `json:"person"`
}
TA贡献1744条经验 获得超4个赞
代码中有两个问题。
第一个是上面提到的@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
- 3 回答
- 0 关注
- 128 浏览
添加回答
举报