go语言中如何遍历members中的数据

{
  "msg-type": "response",
  "payload": {
    "members": {
      "8a0ec22a-128f-11e6-a590-080027e85705": {
        "ip": "192.168.1.22",
        "role": "master",
        "state": "online"
      },
      "3r3423e3-128f-11e6-a590-080027e85705": {
        "ip": "192.168.1.23",
        "role": "master",
        "state": "online"
      }
    },
    "result": "OK"},
  "src_ip": "localhost",
  "target": "client",
  "version": "1.0"
}
阅读 2.6k
1 个回答

示例代码:

package main

import (
    "encoding/json"
    "fmt"
)

var JSONStr = `
{
  "msg-type": "response",
  "payload": {
    "members": {
      "8a0ec22a-128f-11e6-a590-080027e85705": {
        "ip": "192.168.1.22",
        "role": "master",
        "state": "online"
      },
      "3r3423e3-128f-11e6-a590-080027e85705": {
        "ip": "192.168.1.23",
        "role": "master",
        "state": "online"
      }
    },
    "result": "OK"},
  "src_ip": "localhost",
  "target": "client",
  "version": "1.0"
}
`

type Member struct {
    IP    string `json:"ip"`
    Role  string `json:"role"`
    State string `json:"state"`
}

func main() {
    var msg struct {
        PayLoad struct {
            Members map[string]Member `json:"members"`
        } `json:"payload"`
    }

    if err := json.Unmarshal([]byte(JSONStr), &msg); err != nil {
        fmt.Println(err)
        return
    }

    for k, v := range msg.PayLoad.Members {
        fmt.Printf("key: %s\t val: %#v\n", k, v)
    }
}

运行方式:

$ go run main.go
key: 8a0ec22a-128f-11e6-a590-080027e85705        val: main.Member{IP:"192.168.1.22", Role:"master", State:"online"}
key: 3r3423e3-128f-11e6-a590-080027e85705        val: main.Member{IP:"192.168.1.23", Role:"master", State:"online"}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题