
场景是用 go 请求对应的 api 处理返回结果
代码如下
client := &http.Client{} reqest, err := http.NewRequest("GET", url, nil) response, _ := client.Do(reqest) body, err := ioutil.ReadAll(response.Body) v := // 这里的 v 应该用什么数据 err = json.Unmarshal([]byte(body), &v) 如上面代码中的 v 应该用什么数据来处理
假如我返回的 json 如下
{ "code": 0, "msg": "success", "data": [ { "id": 5, "router": "vfile" }, { "id": 6, "router": "test" }, ] code 值 = v["code"],但是我如果要取 data 里面的值应该怎么取? v["data"][0]["id"] ,v["data"][0] 都报错
没有提前初始化 map 内容的好像支持 ````v.xxx``` `取值?
实际结果 json 的嵌套远比上面的还是深
刚接触 go,还请各位大佬指点指点!
1 DigDeeply 2018-12-27 12:29:11 +08:00 |
2 cuberlzy 2018-12-27 12:31:01 +08:00 这种时候 gjson 就派上用场了 |
3 likexian 2018-12-27 12:32:04 +08:00 1. 如果无法预先确定返回结构,就只能传个 interface 进去 2. 传 interface 进行,要取出来的时候,要做 type assert 建议用个库来处理下,会方便一些,比如: https://github.com/likexian/simplejson-go 使用方法参考例子 |
4 GeruzoniAnsasu 2018-12-27 12:33:35 +08:00 如果 json 的结构会改变 那只能是 struct 嵌 map[string]interface 然后再 type assert 再转 go 处理 json 并没有 那么 灵活 |
5 miyuki 2018-12-27 14:31:56 +08:00 这种时候还是用库吧 struct 要针对每个返回数据定义,如果是 nested 的 json 就比较麻烦… interface{} 取值也麻烦… |
6 winglq 2018-12-27 15:24:55 +08:00 api 返回固定的话我选 1 |
7 xujiaja 2018-12-27 16:56:51 +08:00 再提供一个第三方库 https://github.com/buger/jsonparser |
8 reus 2018-12-27 17:40:46 +08:00 第一个有什么问题?用到什么字段就写什么,又不是一定要你定义好全部的才能用 |
9 wenzhoou 2018-12-27 18:22:54 +08:00 via Android 这 gjson 还真是不错啊 |
10 dabaibai 2018-12-27 23:11:14 +08:00 via iPhone 不喜欢反射相关的东西。。。 |
11 shuhao 2018-12-28 08:11:41 +08:00 via Android 选 1,针对每个 API 定义一个 struct. |
12 devtk 2018-12-28 11:19:53 +08:00 用 gjson 很方便的 |