dovgqc2648 2017-02-06 21:26
浏览 69
已采纳

如何在GOLANG中解析JSON哈希的JSON数组

i have the following json array of json hashes :

[
  {
    "name": "XXXX",
    "address": "XXXX",
    "keepalive": {
      "thresholds": {
        "warning": 30,
        "critical": 100
      },
      "handlers": [
        "XXXXX"
      ],
      "refresh": 180
    },
    "subscriptions": [
      "XXXX",
      "XXXX",
      "XXXX"
    ],
    "version": "0.17.1",
    "timestamp": 1486413490
  },
  {...}, 
  {...},
...
]

And am parsing the array as the following :

type Client struct {
    Name string `json:"name"`
    Address string `json:"address"`
    PublicDNS string `json:"publicDNS"`
    keepalive [] string `json:"keepalive"`
    Subscriptions [] string `json:"subscriptions"`
    Version string `json:"version"`
    Timestamp int64 `json:"timestamp"`
}

type ClientResponse []Client


func getClients(body []byte) (*ClientResponse, error) {
    var s = new(ClientResponse)
    err := json.Unmarshal(body, &s)
    if(err != nil){
        fmt.Println("whoops:", err)
    }
    return s, err
}


func main() {
    res,err := http.Get("http://xxxxx:4567/clients")
    if err != nil{
        panic(err.Error())
    }

    body,err := ioutil.ReadAll(res.Body)
    if err != nil{
        panic(err.Error())
    }
    s, err := getClients([]byte(body))  
    fmt.Println(s)
}

Problem : variable s , contain all arrays . so how can i get lets say name value for all arrays ? should i do for loop and get values i need ? is this the best approach ?

  • 写回答

1条回答 默认 最新

  • dongqin1861 2017-02-06 21:33
    关注

    You'll have to loop over them.

    names := make([]string, len(*s))
    for i := range *s {
        names[i] = (*s)[i].Name
    }
    

    Incidentally, your structure for unmarshalling is incorrect. keepalive isn't exported, so it won't be unmarshalled, and even if it were, it's defined as a slice of strings, while the keepalive field in the JSON is an object with thresholds, handlers, and refresh fields

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

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格