ioutil.ReadAll和unmarshal对嵌套curl响应返回错误,原因是数组结构的键存在问题[已关闭]

mwecs4sa  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(148)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
上个月关门了。
Improve this question
为了给您提供上下文,我将 curl 到第三方端点,响应与下面的类似

{
    "code": 200,
    "message": "Success",
    "data": {
        "list": [
            {
               "user": "user A",
               "status" : "normal"
            },
            {
                "user": "user B",
               "status" : "normal"
            }
        ],
        "page": 1,
        "total_pages": 5000
    }
}

我的结构类似于

type User struct {
    Code    int    `json:"code"`
    Message string `json:"message"`
    Data    struct {
        List []struct {
            User   string `json:"user"`
            Status string `json:"status"`
        } `json:"list"`
        Page       int `json:"page"`
        TotalPages int `json:"total_pages"`
    } `json:"data"`
}

请检查我的代码

defer response.Body.Close()
io_response, err := ioutil.ReadAll(response.Body)

returnData := User{}
err = jsoniter.Unmarshal([]byte(io_response), &returnData)
if err != nil {
   log.Println(err)
}

上面的代码返回一个错误

decode slice: expect [ or n, but found {, error found in #10 byte of ...|:{"list":{"1"

当我执行fmt.Println(string(io_response))时,它的返回如下:
{【货号】:200个【留言】:“成功”,“数据”:{“列表”:{“1”:{“用户”:“用户A”,“状态”:“正常”},“2”:{“用户”:“用户A”,“状态”:“正常”} },“页码”:1、“共_页”:2000年} }
你能教我如何正确地阅读回复或者如何解组吗?谢谢

8xiog9wr

8xiog9wr1#

您可以像这样定义您结构:

type User struct {
    Code    int    `json:"code"`
    Message string `json:"message"`
    Data    struct {
        List map[string]struct {
            User   string `json:"user"`
            Status string `json:"status"`
        } `json:"list"`
        Page       int `json:"page"`
        TotalPages int `json:"total_pages"`
    } `json:"data"`
}

相关问题