如何解析这个json对象:
{
"ports": {
"0": {
"3306": "3306"
},
"1": {
"3307": "9908"
}
}
}
我可以有N个端口,每个端口的值总是一个键:值对。
到目前为止,我已经尝试过这个:
type Ports struct {
Port map[string]string
}
有了这个,我得到了键(0,1),但值是空的。
我也试过这个:
type Ports struct {
Port map[string]struct{
Values map[string]string
}
}
但也没有工作。
这就是我解码json对象的方式:
var requestBody Ports
decoder := json.NewDecoder(body)
err := decoder.Decode(&requestBody)
答案 0 :(得分:3)
使用此类型:
type Ports struct {
Ports map[string]map[string]string
}
注意:
答案 1 :(得分:1)
你可以像这样解析它。
https://play.golang.org/p/09VDJidAVs
type Ports struct {
Ports map[string]*Port `json:"ports"`
}
type Port map[string]string
func main() {
p := &Ports{}
err := json.Unmarshal([]byte(ports),p)
if err != nil {
fmt.Println(err)
return
}
// using
// if you need to sort by the number value, get the keys in a slice
keys := make([]string, 0, len(p.Ports))
for k, _ := range p.Ports {
keys = append(keys, k)
}
// sort here
for i := range keys {
fmt.Printf("%+v\n",p.Ports[keys[i]])
}
// if you don't care to sort
for _, v := range p.Ports {
for k, v := range *v {
fmt.Printf("%s: %s\n", k,v)
}
}
}