猿问

Golang中的Json Unmarshaling

我想在golang中解组followng 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}]


子衿沉夜
浏览 101回答 1
1回答

摇曳的蔷薇

对于 Marshaling 和 Unmarshaling,您应该将 struct 字段定义为导出字段,并且目标应该是 regs 的映射。此外 bool 类型对 the 无效,Enabled您应该将其更改为 inttype 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}]
随时随地看视频慕课网APP

相关分类

Go
我要回答