douruye5092 2018-03-29 13:02 采纳率: 100%
浏览 46
已采纳

用GO解组JSON失败,有任何提示吗?

Please take a look at the following structure and tell me why I can't unmarshall it.

type Server struct {
    Etcd [] struct {
        CertCn string `json:"cert_cn"`
    } `json:"etcd"`
}

type CertExpiryReport struct {
    Data struct {
        Servers map[string]*Server
    } `json:"data"`
    Summary struct {
        Expired int `json:"expired"`
        Ok      int `json:"ok"`
        Total   int `json:"total"`
        Warning int `json:"warning"`
    } `json:"summary"`
}

The following is the JSON content.

{
  "data": {
    "myserver1.mydomain1.org": {
      "etcd": [
        {
          "cert_cn": "CN:something"
        }
      ]
    }
    "myserver2.mydomain2.org": {
      "etcd": [
        {
          "cert_cn": "CN:something"
        }
      ]
    }
  }, 
  "summary": {
    "expired": 0, 
    "ok": 31, 
    "total": 31, 
    "warning": 0
  }
}

This is my code.

func printStuff() {
    bytes, err := ioutil.ReadFile(jsonFile)
    if err != nil {
        log.Errorf("%s", err.Error())
        os.Exit(1)
    }

    var certExpiryReport CertExpiryReport
    err = json.Unmarshal(bytes, &certExpiryReport)
    if err != nil {
        log.Errorf("%s", err.Error())
        os.Exit(1)
    }

    log.Info(certExpiryReport)
}

The output is the following. I am not getting any errors.

{{map[]} {0 31 31 0}}

Why can't GO parse the JSON? Is something wrong with my structs?

  • 写回答

1条回答 默认 最新

  • duan19740319 2018-03-29 13:05
    关注

    There is something wrong with the struct (or JSON). CertExpiryReport struct has additional level of nesting in Data field. Try to replace

    Data struct {
        Servers map[string]*Server
    } `json:"data"`
    

    With

    Data map[string]*Server `json:"data"`
    

    Also, your JSON gives me error (you forgot comma after first server description). Here is working test with change to your structs and JSON: https://play.golang.org/p/QwnHGc9MElb

    Other way would be to put inside JSON "data" field "servers" field, and store content of data there. If you need more nesting.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型