反序列化 JSON 数字返回错误值

我想json strings用go语言反序列化。不同键的值类型不同。例如,在 中string {\"category\":\"6\",\"cid\":2511993760745787586},category类型是string,cid类型是int64。


我的代码如下:


func main() {

    oriInfo := make([]interface{}, 0)

    pickled := "[{\"category\":\"6\",\"cid\":2511993760745787586},{\"category\":\"5\",\"cid\":2504429915944783937}]"

    err := json.Unmarshal([]byte(pickled), &oriInfo)

    if err != nil {

        fmt.Println(err)

        return

    }

    all := make([]map[string]interface{}, 0, len(oriInfo))

    for _, val := range oriInfo {

        m := make(map[string]interface{})

        for k, v := range val.(map[string]interface{}) {

            switch k {

            case "category":

                m[k] = v.(string)

            case "cid":

                m[k] = int64(v.(float64))

            }

        }

        all = append(all, m)

    }

    fmt.Println(all)

}

结果如下:

[map[category:6 cid:2511993760745787392] map[category:5 cid:2504429915944783872]]


显然,这不是我想要的,因为 的结果cid是2511993760745787392和2504429915944783872,但我原来的结果cid是2511993760745787586和2504429915944783937。

除了使用struct之外,还有更好的方法吗?


呼如林
浏览 71回答 1
1回答

12345678_0001

执行此操作的正常方法是使用结构:type myStruct struct {    Category string `json:"category"`    CID      int64  `json:"cid"`}var oriInfo []myStructerr := json.Unmarshal([]byte(pickled), &oriInfo)// ... etc
打开App,查看更多内容
随时随地看视频慕课网APP