json - golang解组未知的json数据
问题描述
我有一个用例,我需要解组来自 HTTP 请求的响应。我不提前知道响应格式,但只想将结果上游返回到 Web 客户端(类似于代理的功能)通常我会像下面这样解组:
resp, _ = http.Post(url, "application/json", bytes.NewBuffer(jsonPayload))
body, _ := ioutil.ReadAll(resp.Body)
responseJson := make(map[string]interface{})
json.Unmarshal(body, &responseJson)
但是,如果结果是 JSON 数组,[{},{}...]
那么我需要执行以下操作
var responseList []map[string]interface{}
json.Unmarshal([]byte(body), &responseList)
如果结果是一个单一的字符串值,"ok"
它也需要不同的解组方法
但是如果我不提前知道响应类型,我怎么知道如何解组?
解决方案
您可以将其解组为如下界面:
var responseJson interface{}
json.Unmarshal(body, &responseJson)
要读取响应类型:
switch resp := responseBody.(type) {
case string:
fmt.Println(resp)
case float64:
fmt.Println(int(resp))
default:
fmt.Println(resp)
}
推荐阅读
- javascript - 如何使用queryselector javascript查找特定数据集(data-*)的innerText或textContent?
- python - 如何在 Celery 任务执行期间强制执行记录器格式?
- neo4j - 是否有能力按时间限制密码查询结果?
- python - python-slugify 和 awesome-slugify 之间的冲突
- php - 即使没有可执行权限也执行php文件
- laravel - Laravel 视图斜线表示法不起作用
- json - 使用 Playframework json 格式化密封类型参数化特征
- c - C语言中的静态存储联合和命名成员初始化
- html - 如何在 Angular 中自动滚动?
- c# - 使用 AAD 身份验证提供程序获取当前登录的用户