golang json converts int to float. What can i do

huangapple go评论123阅读模式
英文:

golang json converts int to float. What can i do

问题

这是我的代码。我正在从一个 JSON 文件中读取,并希望将值插入到我的全局变量 mode 中。

  1. jsonFile, err := os.Open("config.json")
  2. if err != nil {
  3. log.Fatal(err)
  4. return err
  5. }
  6. var responseJson map[string]interface{}
  7. d := json.NewDecoder(jsonFile)
  8. d.UseNumber()
  9. d.Decode(&responseJson)
  10. 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.

  1. jsonFile, err := os.Open("config.json")
  2. if err != nil {
  3. log.Fatal(err)
  4. return err
  5. }
  6. //byteValue, _ := ioutil.ReadAll(jsonFile)
  7. var responseJson map[string]interface{}
  8. /*if err := json.NewDecoder(jsonFile).Decode(&responseJson); err != nil {
  9. log.Fatal(err)
  10. return err
  11. }*/
  12. d := json.NewDecoder(jsonFile)
  13. d.UseNumber()
  14. d.Decode(&responseJson)
  15. mode = responseJson["mode"].(int)

答案1

得分: 4

类型断言与转换:

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson map[string]interface{}
  4. d := json.NewDecoder(json_file)
  5. if err := d.Decode(&responseJson); err != nil {
  6. panic(err)
  7. }
  8. mode := int(responseJson["mode"].(float64))
  9. fmt.Println(mode)
  10. }

使用json.Number进行类型断言:

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson map[string]interface{}
  4. d := json.NewDecoder(json_file)
  5. d.UseNumber()
  6. if err := d.Decode(&responseJson); err != nil {
  7. panic(err)
  8. }
  9. i64, err := (responseJson["mode"].(json.Number)).Int64()
  10. if err != nil {
  11. panic(err)
  12. }
  13. mode := int(i64)
  14. fmt.Println(mode)
  15. }

使用结构体:

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson struct{ Mode int }
  4. d := json.NewDecoder(json_file)
  5. if err := d.Decode(&responseJson); err != nil {
  6. panic(err)
  7. }
  8. fmt.Println(responseJson.Mode)
  9. }
英文:

Type-assert with conversion:

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson map[string]interface{}
  4. d := json.NewDecoder(json_file)
  5. if err := d.Decode(&responseJson); err != nil {
  6. panic(err)
  7. }
  8. mode := int(responseJson["mode"].(float64))
  9. fmt.Println(mode)
  10. }

Type-assert with json.Number

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson map[string]interface{}
  4. d := json.NewDecoder(json_file)
  5. d.UseNumber()
  6. if err := d.Decode(&responseJson); err != nil {
  7. panic(err)
  8. }
  9. i64, err := (responseJson["mode"].(json.Number)).Int64()
  10. if err != nil {
  11. panic(err)
  12. }
  13. mode := int(i64)
  14. fmt.Println(mode)
  15. }

With struct:

  1. var json_file = bytes.NewReader([]byte(`{"mode":1234}`))
  2. func main() {
  3. var responseJson struct{ Mode int }
  4. d := json.NewDecoder(json_file)
  5. if err := d.Decode(&responseJson); err != nil {
  6. panic(err)
  7. }
  8. fmt.Println(responseJson.Mode)
  9. }

huangapple
  • 本文由 发表于 2022年3月18日 18:26:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/71525600.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定