'golang json converts int to float. What can i do [closed]
Here is my code. I'm reading from a JSON file and want to insert the value into my global variable mode.
jsonFile, err := os.Open("config.json")
if err != nil {
log.Fatal(err)
return err
}
//byteValue, _ := ioutil.ReadAll(jsonFile)
var responseJson map[string]interface{}
/*if err := json.NewDecoder(jsonFile).Decode(&responseJson); err != nil {
log.Fatal(err)
return err
}*/
d := json.NewDecoder(jsonFile)
d.UseNumber()
d.Decode(&responseJson)
mode = responseJson["mode"].(int)
Solution 1:[1]
Type-assert with conversion:
var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
func main() {
var responseJson map[string]interface{}
d := json.NewDecoder(json_file)
if err := d.Decode(&responseJson); err != nil {
panic(err)
}
mode := int(responseJson["mode"].(float64))
fmt.Println(mode)
}
Type-assert with json.Number
var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
func main() {
var responseJson map[string]interface{}
d := json.NewDecoder(json_file)
d.UseNumber()
if err := d.Decode(&responseJson); err != nil {
panic(err)
}
i64, err := (responseJson["mode"].(json.Number)).Int64()
if err != nil {
panic(err)
}
mode := int(i64)
fmt.Println(mode)
}
With struct:
var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
func main() {
var responseJson struct{ Mode int }
d := json.NewDecoder(json_file)
if err := d.Decode(&responseJson); err != nil {
panic(err)
}
fmt.Println(responseJson.Mode)
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | mkopriva |
