英文:
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}]
英文:
I want to unmarshal the followng json in golang. I am not able to access the inner data .
What is the best way to do it?
{
"1": {
"enabled": 1,
"pct": 0.5
},
"2": {
"enabled": 1,
"pct": 0.6
},
"3": {
"enabled": 1,
"pct": 0.2
},
"4": {
"enabled": 1,
"pct": 0.1
}
}
I use
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)
but i dont see the values inside the struct.
Result: map[1:{enabled:false pct:0} 2:{enabled:false pct:0} 3:{enabled:false pct:0} 4:{enabled:false pct:0}]
答案1
得分: 1
对于编组和解组,您应该将结构字段定义为导出字段,并且目标应该是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}]
英文:
For Marshaling and Unmarshaling, you should define struct field as exported field, also the destination should be map of regs.
Also the bool type is not valid for the Enabled
and you should change it to 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)
}
The output will be:
map[1:{1 0.5} 2:{1 0.6} 3:{1 0.2} 4:{1 0.1}]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论