我有一个这样的结构体。我想把我的Json解析成这个结构体。但是我不能到达嵌套的结构体。
我希望能访问like的substructs,但我不能:
func main() {
str := `[{
"ApplicationDefaults": {
"ApplicationPoolName": "DefaultAppPool",
....
}]`
mdl := foo(str)
// mdl.ApplicationDefaults ?? I can't reach like this. There are only a few functions like: append!, last! , print!, range!, reverse!, sort!, var!
}
有人帮忙吗?
我的结构:
package model
type SitesDetails []struct {
ApplicationDefaults struct {
ApplicationPoolName string `json:"ApplicationPoolName"`
EnabledProtocols string `json:"EnabledProtocols"`
Attributes string `json:"Attributes"`
ChildElements string `json:"ChildElements"`
ElementTagName string `json:"ElementTagName"`
IsLocallyStored bool `json:"IsLocallyStored"`
Methods interface{} `json:"Methods"`
RawAttributes string `json:"RawAttributes"`
Schema string `json:"Schema"`
} `json:"ApplicationDefaults"`
Applications []string `json:"Applications"`
Bindings []string `json:"Bindings"`
ID int `json:"Id"`
Limits struct {
ConnectionTimeout string `json:"ConnectionTimeout"`
MaxBandwidth int64 `json:"MaxBandwidth"`
MaxConnections int64 `json:"MaxConnections"`
MaxURLSegments int `json:"MaxUrlSegments"`
Attributes string `json:"Attributes"`
ChildElements string `json:"ChildElements"`
ElementTagName string `json:"ElementTagName"`
IsLocallyStored bool `json:"IsLocallyStored"`
Methods interface{} `json:"Methods"`
RawAttributes string `json:"RawAttributes"`
Schema string `json:"Schema"`
} `json:"Limits"`
}
这是我用来将json解析为我的结构体的代码:
func foo(resp string) model.SitesDetails {
data := []byte(resp)
var m model.SitesDetails
err := json.Unmarshal(data, &m)
if err != nil {
log.Fatal(err)
}
return m
}
1条答案
按热度按时间eqqqjvef1#
在这里,您正在解组到一个***片***中(因为您的
SitesDetails
类型是[]struct
,并且您的json以数组开头),因此您应该能够通过访问您的详细信息这也解释了为什么您的IDE只建议可以应用于切片的操作,例如appending(我猜这将插入适当的代码以附加到切片)。
顺便说一句,您真的不应该调用变量
model
,因为这显然也是您的包所使用的名称(您使用的是model.SitesDetails
),因此您的变量名会在此时隐藏包-这可能会导致严重的混乱,任何像样的IDE都应该警告您这一点。