我想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之外,还有更好的方法吗?
1 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
执行此操作的正常方法是使用结构:
type myStruct struct {
Category string `json:"category"`
CID int64 `json:"cid"`
}
var oriInfo []myStruct
err := json.Unmarshal([]byte(pickled), &oriInfo)
// ... etc
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消