I'm trying to do a simple unmarshall and extracting the int information from the code below. I found a link from another stackoverflow : link. Though, it doesn't help in my case. the program according to ideone think the data is a float.
package main
import "fmt"
import "encoding/json"
func main(){
byt := []byte(`{"status": "USER_MOVED_LEFT", "id":1, "x":5, "y":3}`)
var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
num := dat["id"].(int)
fmt.Println(num)
}
If you are converting your byt
to map[string]interfaec{}
the default value of the number will be float64
.
func main(){
byt := []byte(`{"status": "USER_MOVED_LEFT", "id":1, "x":5, "y":3}`)
var dat map[string]interface{}
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
fmt.Println(reflect.TypeOf(dat["id"])) // print the type of value
num := dat["id"].(float64)
fmt.Println(num)
}
But you can also change this behavior by converting your byt
which is your data to a struct
like this :
type myStruct struct {
Status string
Id int
x int
y int
}
func main() {
byt := []byte(`{"status": "USER_MOVED_LEFT", "id":1, "x":5, "y":3}`)
dat := myStruct{}
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
fmt.Println(reflect.TypeOf(dat.Id))
fmt.Printf("%+v
", dat.Id)
}