我想用go语言反序列化json strings
。不同键的值类型不同。例如,在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
和{ {1}}。
除了使用结构,还有更好的方法吗?
答案 0 :(得分:8)
通常的方法是使用struct:
container {
position:fixed;
left:0;
top:0;
right:0;
bottom:0;
}
这应该可以解决您的问题,因为您的问题是floating point rounding error的结果。