Golang中嵌套结构体无法正确编码的问题
Golang中嵌套结构体无法正确编码的问题
我正在处理一个嵌套结构,并尝试将其编码为JSON字符串。但只有第一个结构被包含在字符串中,没有任何子结构被编码到字符串里。尝试通过data.children[0]、data.children[0].children[0]打印出来,数据看起来是正确保存的。问题出在哪里?
type Data struct {
ID int `json:"ID"`
Name string `json:"Name"`
children []Data `json:"children"`
}
type DbData struct{
ID int `mapstructure:"ID" json:"ID" gorm:"primary_key;column:ID"`
Name string `mapstructure:"Name" json:"Name" gorm:"primary_key;column:Name"`
ParentID int `mapstructure:"ParentID" json:"ParentID" gorm:"primary_key;column:ParentID"`
}
func getChildData(Id int) Data{
var data Data
var count = 0
var dbData DbData
childdata := make([]DbData,0)
db.Where("ID = ?",Id).First(&dbData)
db.Where("ParentID = ?",Id).Find(&childdata).Count(&Count)
data.ID = dbData.ID
data.Name = dbData.Name
for i := 0; i < count; i++ {
data .children = append(data .children, getChildData(childdata [i].ID))
}
if count == 0 {
data.children = make([]Data, 0)
}
}
更多关于Golang中嵌套结构体无法正确编码的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
由于反射机制的限制,所有你想要进行JSON序列化的字段都需要对外公开,也就是说字段名必须以大写字母开头。
问题在于结构体字段children是小写开头,导致JSON编码器无法访问该字段。在Go语言中,只有导出的字段(首字母大写)才能被JSON包编码。
将结构体修改如下:
type Data struct {
ID int `json:"ID"`
Name string `json:"Name"`
Children []Data `json:"children"` // 改为大写C
}
同时更新相关代码:
func getChildData(Id int) Data {
var data Data
var count = 0
var dbData DbData
childdata := make([]DbData, 0)
db.Where("ID = ?", Id).First(&dbData)
db.Where("ParentID = ?", Id).Find(&childdata).Count(&count)
data.ID = dbData.ID
data.Name = dbData.Name
for i := 0; i < count; i++ {
data.Children = append(data.Children, getChildData(childdata[i].ID))
}
if count == 0 {
data.Children = make([]Data, 0)
}
return data // 需要返回data
}
现在JSON编码器可以正确访问Children字段,嵌套结构体将被完整编码到JSON字符串中。

