请看一下以下结构并告诉我为什么我无法拆除它。
type Server struct {
Etcd [] struct {
CertCn string `json:"cert_cn"`
} `json:"etcd"`
}
type CertExpiryReport struct {
Data struct {
Servers map[string]*Server
} `json:"data"`
Summary struct {
Expired int `json:"expired"`
Ok int `json:"ok"`
Total int `json:"total"`
Warning int `json:"warning"`
} `json:"summary"`
}
以下是JSON内容。
{
"data": {
"myserver1.mydomain1.org": {
"etcd": [
{
"cert_cn": "CN:something"
}
]
}
"myserver2.mydomain2.org": {
"etcd": [
{
"cert_cn": "CN:something"
}
]
}
},
"summary": {
"expired": 0,
"ok": 31,
"total": 31,
"warning": 0
}
}
这是我的代码。
func printStuff() {
bytes, err := ioutil.ReadFile(jsonFile)
if err != nil {
log.Errorf("%s", err.Error())
os.Exit(1)
}
var certExpiryReport CertExpiryReport
err = json.Unmarshal(bytes, &certExpiryReport)
if err != nil {
log.Errorf("%s", err.Error())
os.Exit(1)
}
log.Info(certExpiryReport)
}
输出如下。我没有收到任何错误。
{{map[]} {0 31 31 0}}
为什么无法解析JSON?我的结构有问题吗?
答案 0 :(得分:3)
struct(或JSON)有问题。 CertExpiryReport结构在数据字段中具有额外的嵌套级别。尝试替换
Data struct {
Servers map[string]*Server
} `json:"data"`
用
Data map[string]*Server `json:"data"`
此外,您的JSON给我错误(您在第一次服务器描述后忘记了逗号)。以下是对结构和JSON的更改的工作测试:https://play.golang.org/p/QwnHGc9MElb
其他方式是放入JSON"数据"字段"服务器"字段,并存储数据的内容。如果你需要更多的嵌套。