英文:
golang json converts int to float. What can i do
问题
这是我的代码。我正在从一个 JSON 文件中读取,并希望将值插入到我的全局变量 mode 中。
jsonFile, err := os.Open("config.json")
if err != nil {
log.Fatal(err)
return err
}
var responseJson map[string]interface{}
d := json.NewDecoder(jsonFile)
d.UseNumber()
d.Decode(&responseJson)
mode = responseJson["mode"].(int)
这段代码的作用是打开名为 "config.json" 的 JSON 文件,并将其中的 "mode" 值赋给全局变量 mode。
英文:
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)
答案1
得分: 4
类型断言与转换:
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)
}
使用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)
}
使用结构体:
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)
}
英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论