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

时间:2018-03-29 13:02:20

标签: json go

请看一下以下结构并告诉我为什么我无法拆除它。

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"`
}

以下是JSON内容。

{
  "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
  }
}

这是我的代码。

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

输出如下。我没有收到任何错误。

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

为什么无法解析JSON?我的结构有问题吗?

1 个答案:

答案 0 :(得分:3)

struct(或JSON)有问题。 CertExpiryReport结构在数据字段中具有额外的嵌套级别。尝试替换

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

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

此外,您的JSON给我错误(您在第一次服务器描述后忘记了逗号)。以下是对结构和JSON的更改的工作测试:https://play.golang.org/p/QwnHGc9MElb

其他方式是放入JSON"数据"字段"服务器"字段,并存储数据的内容。如果你需要更多的嵌套。