执行 json 解组时为空字段
Empty fields while doing json unmarshal
我写了这段代码。我不明白为什么当我 运行 它时它会给出空字段。我试过大写变量。还是不行。
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)
}
您的 JSON 到 Go 的映射不正确。要在解组过程中在结构字段和 JSON 属性之间进行自动匹配,字段 names(而不是其类型的名称)必须与 [=31] 中的属性匹配=](以不区分大小写的方式):
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?
我写了这段代码。我不明白为什么当我 运行 它时它会给出空字段。我试过大写变量。还是不行。
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)
}
您的 JSON 到 Go 的映射不正确。要在解组过程中在结构字段和 JSON 属性之间进行自动匹配,字段 names(而不是其类型的名称)必须与 [=31] 中的属性匹配=](以不区分大小写的方式):
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?