将数据解组到任何结构

时间:2016-06-17 15:46:13

标签: go

当从端点解组数据时,我几乎总是有一个结构,其中包含我希望从我的请求中获取的数据,我将其解组。好吧,有时我想看到所有返回给我的东西,但我不确定那些数据是什么,所以我不知道如何在我的结构中定义它。有没有办法让一个结构只能抓取所有数据被解组,而不必指定它?

这是我认为可行的,但事实并非如此

resp, err := httpClient.Get("/api/stuff")
data, _ := ioutil.ReadAll(resp.Body)

var myStruct struct{}
json.Unmarshal(data, myStruct)

2 个答案:

答案 0 :(得分:3)

如果您事先不知道JSON对象的组成,you can unmarshal into a map[string]interface{}.

var myMap map[string]interface{}
json.Unmarshal(data, &myMap)

查看示例here.

答案 1 :(得分:1)

如果你不知道如何定义你的结构,那么也许你应该use a map.它非常适合解组JSON。以下是如何在不确切知道您接收的数据的情况下执行此操作的示例:

func parseJSON(r *http.Request) (map[string]interface{}, error) {
    var postData interface{}
    decoder := json.NewDecoder(r.Body)
    err := decoder.Decode(&postData)
    if err != nil {
        return nil, err
    }

    return postData.(map[string]interface{}), nil
}

现在你至少有一个每个数据的字符串名称,这应该让你的应用程序知道如何处理它。