首页 > golang解析api返回的json结构问题

golang解析api返回的json结构问题

我想用golang解析一个api请求的结构,该api返回的结构如下:

{
  "code": 200,
  "message": "xxx",
  "data": {
      "a": 1,
      "b": "c",
      ...
  }
}

golang代码如下:

func api() interface{} {
    resp, err := http.Get("xxx")
    if err != nil {
        //
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        //
    }
    result := map[string]interface{}{}
    json.Unmarshal(body, &result)

    return result
}

这个result按理说就是最上面描述的那个结构,但是我打印response code就必须使用如下方式:

resp := api()
result := resp.(map[string]interface{})
fmt.Println(result["code"])

可是我想遍历打印response data中的内容呢?

for k, v := range result["data"] {
    fmt.Printf("k=%v, v=%v\n", k, v)
}

会报出如下错误:


cannot range over result["data"] (type interface {})

感觉golang解析json好麻烦.


好像要这样,r := result["data"].(map[string]interface{}),然后再遍历r。
可以用simplejson第三方解析库试试


type Result struct {
    Code int
    Message string
    Data map[string]interface{}
}
//...
var res Result
json.Unmarshal(body, &res)
【热门文章】
【热门文章】