如何为 2 种类型 map[string]interface{} 和 []interface{}

这是我的示例游乐场https://go.dev/play/p/MosQs62YPvI

我的 curl API 返回 2 种返回,可以是任何 ff:

{

  "code": 200,

  "message": "Success",

  "data": {

    "list": {

      "1": {

        "user": "user A",

        "status": "normal"

      },

      "2": {

        "user": "user A",

        "status": "normal"

      }

    },

    "page": 1,

    "total_pages": 2000

  }

}

或者


 {

  "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"`

}

这是我解组的方法


err = json.Unmarshal([]byte(io_response), &returnData)

    if err != nil {

        log.Println(err)

    }

我曾尝试创建自己的解组器,但在将其转换为 map[string]interface{} 时遇到问题


你能帮我么?或者有什么更好的方法吗?


猛跑小猪
浏览 162回答 1
1回答

慕娘9325324

type UserItem struct {    User   string `json:"user"`    Status string `json:"status"`}type UserList []UserItemfunc (ul *UserList) UnmarshalJSON(data []byte) error {    switch {    case len(data) == 0 || string(data) == `null`:        return nil    case data[0] == '[': // assume it's a JSON array        return json.Unmarshal(data, (*[]UserItem)(ul))    case data[0] == '{': // assume it's a JSON object        obj := make(map[string]UserItem)        if err := json.Unmarshal(data, &obj); err != nil {            return err        }        for _, v := range obj {            *ul = append(*ul, v)        }        return nil    default:        return fmt.Errorf("unsupported json type")    }    return nil}https://go.dev/play/p/Y5PAjrmPhy2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go