解析服务器发送的数组/切片

时间:2018-12-09 13:11:22

标签: arrays json go

服务器正在发送回这样的响应:

me@linux:~> curl -X GET http://*.*.*.*:8080/profiles

[
        {
                "ProfileID": 1,
                "Title": "65micron"
        },
        {
                "ProfileID": 2,
                "Title": "80micron"
        }
]

我曾尝试this solution将响应解析为JSON,但如果服务器响应如下,它仅可用于

{
    "array": [
        {
                "ProfileID": 1,
                "Title": "65micron"
        },
        {
                "ProfileID": 2,
                "Title": "80micron"
        }
    ]
}

有人知道我如何将服务器响应解析为JSON吗?


我想到的一个主意是在{ "array":缓冲区的开头添加http.Response.Body,并在结尾处添加},然后使用the standard solution。但是,我不确定这是否是最好的主意。

2 个答案:

答案 0 :(得分:2)

您可以直接将其解组为数组

data := `[
    {
        "ProfileID": 1,
        "Title": "65micron"
    },
    {
        "ProfileID": 2,
        "Title": "80micron"
    }]`

type Profile struct {
    ProfileID int
    Title     string
}

var profiles []Profile

json.Unmarshal([]byte(data), &profiles)

您也可以直接从Request.Body阅读。

func Handler(w http.ResponseWriter, r *http.Request) {

    var profiles []Profile
    json.NewDecoder(r.Body).Decode(&profiles)
    // use `profiles`
}

Playground

答案 1 :(得分:1)

您应该定义一个结构

type Profile struct {
    ID int `json:"ProfileID"`
    Title string `json:"Title"`
}

在解码响应之后

var r []Profile
err := json.NewDecoder(res.Body).Decode(&r)