英文:
Golang unmarshal struct with list of another struct
问题
我正在使用Go语言,尝试将JSON解组为一个包含另一个结构体列表的结构体。有些地方出了问题,它无法解组,我无法找出原因。还有其他需要做的事情吗?
package main
import (
"encoding/json"
"fmt"
)
type FullMessage struct {
SubMessages []SubMessage `json:"sub_messages"`
}
type SubMessage struct {
Value string `json:"value"`
}
func main() {
responseBytes := []byte(`{ "sub_messages": [ {"value": "testing" } ] }`)
myMessage := FullMessage{}
unmarshalErr := json.Unmarshal(responseBytes, &myMessage)
fmt.Println(unmarshalErr)
fmt.Println(myMessage) // 应该有值,但是没有
fmt.Println(len(myMessage.SubMessages)) // 应该是1,但是是0
}
请注意,我已经对代码进行了一些修正:
- 在
FullMessage
结构体的json
标签中,将sub_messages
改为"sub_messages"
,以确保正确解组。 - 在
SubMessage
结构体的json
标签中,将value
改为"value"
,以确保正确解组。 - 将JSON字符串中的双引号改为反引号,以避免转义字符的问题。
这些更改应该能够解决你遇到的问题。
英文:
I am using Go and trying to unmarshal JSON to a struct which contains a list of another struct. Something is wrong where it doesn't unmarshal it and I cannot figure out why. Is there something else you are supposed to do?
package main
import (
"encoding/json"
"fmt"
)
type FullMessage struct {
SubMessages []SubMessage `json:sub_messages`
}
type SubMessage struct {
Value string `json:value`
}
func main() {
responseBytes := []byte("{ \"sub_messages\": [ {\"value\": \"testing\" } ] }")
myMessage := FullMessage{}
unmarshalErr := json.Unmarshal(responseBytes, &myMessage)
fmt.Println(unmarshalErr)
fmt.Println(myMessage) // should be populated, but it isn't
fmt.Println(len(myMessage.SubMessages)) // should be 1, is 0
}
答案1
得分: 1
你需要在结构标签中添加引号,如下所示:
type FullMessage struct {
SubMessages []SubMessage `json:"sub_messages"`
}
type SubMessage struct {
Value string `json:"value"`
}
英文:
You need to add quotes in the struct tag as follows:
type FullMessage struct {
SubMessages []SubMessage `json:"sub_messages"`
}
type SubMessage struct {
Value string `json:"value"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论