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}]