首页 > 解决方案 > 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"它也需要不同的解组方法

但是如果我不提前知道响应类型,我怎么知道如何解组?

标签: jsongounmarshalling

解决方案


您可以将其解组为如下界面:

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)
}

推荐阅读