我写了这段代码。当我运行它时,我无法弄清楚为什么它会给空字段。我试过大写变量。仍然无法正常工作。
package main
import (
"encoding/json"
"fmt"
)
type FirstName struct {
Name1 string
}
type SecondName struct {
Name2 string
}
type Person struct {
Details FirstName
MoreDetails SecondName
}
func main() {
var someGuy Person
var data = []byte(`{"details": {"firstName": "alan"}, "moreDetails": {"surName": "Turing"}}`)
json.Unmarshal(data, &someGuy)
fmt.Println(someGuy)
}
答案 0 :(得分:6)
您的JSON to Go映射不正确。要在解组过程中在struct字段和JSON属性之间进行自动匹配,字段 names (而不是其类型的名称)必须与JSON中的属性匹配(在敏感的情况下) :
type FirstName struct {
FirstName string
}
type SecondName struct {
SurName string
}
type Person struct {
Details FirstName
MoreDetails SecondName
}
有了这个,输出是(试试Go Playground):
{{alan} {Turing}}
如果要将这些名称保留在Go中,另一个选项是在Go结构字段和JSON属性名称之间提供映射。为此,您可以使用struct tags:
type FirstName struct {
Name1 string `json:"firstName"`
}
type SecondName struct {
Name2 string `json:"surName"`
}
输出将是相同的。在Go Playground上试试这个。
有关结构标记的介绍和更多详细信息,请参阅What are the use(s) for tags in Go?