golang json converts int to float. What can i do

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

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)
}

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:

确定