Json 在 Golang 中解组
Json Unmarshaling in Golang
我想在 golang 中解组以下 json。我无法访问内部数据。
最好的方法是什么?
{
"1": {
"enabled": 1,
"pct": 0.5
},
"2": {
"enabled": 1,
"pct": 0.6
},
"3": {
"enabled": 1,
"pct": 0.2
},
"4": {
"enabled": 1,
"pct": 0.1
}
}
我用
type regs struct {
enabled bool `json:"enabled,omitempty"`
pct float64 `json:"pct,omitempty"`
}
var r map[string]regs
if err := json.Unmarshal([]byte(jStr), &r); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", r)
但我没有看到结构中的值。
结果:map[1:{enabled:false pct:0} 2:{enabled:false pct:0} 3:{enabled:false pct:0} 4:{enabled:false pct:0}]
对于封送处理和解封处理,您应该将结构字段定义为导出字段,目标也应该是 regs 映射。
此外,bool 类型对 Enabled
无效,您应将其更改为 int
type regs struct {
Enabled int `json:"enabled,omitempty"`
Pct float64 `json:"pct,omitempty"`
}
func main() {
a := `{
"1": {
"enabled": 1,
"pct": 0.5
},
"2": {
"enabled": 1,
"pct": 0.6
},
"3": {
"enabled": 1,
"pct": 0.2
},
"4": {
"enabled": 1,
"pct": 0.1
}
}`
dest := make(map[string]regs)
json.Unmarshal([]byte(a), &dest)
fmt.Println(dest)
}
输出将是:
map[1:{1 0.5} 2:{1 0.6} 3:{1 0.2} 4:{1 0.1}]
我想在 golang 中解组以下 json。我无法访问内部数据。 最好的方法是什么?
{
"1": {
"enabled": 1,
"pct": 0.5
},
"2": {
"enabled": 1,
"pct": 0.6
},
"3": {
"enabled": 1,
"pct": 0.2
},
"4": {
"enabled": 1,
"pct": 0.1
}
}
我用
type regs struct {
enabled bool `json:"enabled,omitempty"`
pct float64 `json:"pct,omitempty"`
}
var r map[string]regs
if err := json.Unmarshal([]byte(jStr), &r); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", r)
但我没有看到结构中的值。
结果:map[1:{enabled:false pct:0} 2:{enabled:false pct:0} 3:{enabled:false pct:0} 4:{enabled:false pct:0}]
对于封送处理和解封处理,您应该将结构字段定义为导出字段,目标也应该是 regs 映射。
此外,bool 类型对 Enabled
无效,您应将其更改为 int
type regs struct {
Enabled int `json:"enabled,omitempty"`
Pct float64 `json:"pct,omitempty"`
}
func main() {
a := `{
"1": {
"enabled": 1,
"pct": 0.5
},
"2": {
"enabled": 1,
"pct": 0.6
},
"3": {
"enabled": 1,
"pct": 0.2
},
"4": {
"enabled": 1,
"pct": 0.1
}
}`
dest := make(map[string]regs)
json.Unmarshal([]byte(a), &dest)
fmt.Println(dest)
}
输出将是:
map[1:{1 0.5} 2:{1 0.6} 3:{1 0.2} 4:{1 0.1}]