I want to deserialize json strings
with the go language. The value types of different keys are different. for example,in string
{\"category\":\"6\",\"cid\":2511993760745787586}
,category
type is string
, cid
type is int64
.
my code is as follows:
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)
}
The results are as follows:[map[category:6 cid:2511993760745787392] map[category:5 cid:2504429915944783872]]
Obviously,this is not what I want, because the result of cid
are 2511993760745787392
and 2504429915944783872
, but my original cid
are 2511993760745787586
and 2504429915944783937
.
In addition to using a struct, is there a better way?