【Golang】解决使用interface{}解析json数字会变成科学计数法的问题

在使用解析json结构体的时候,使用interface{}接数字会发现变成了科学计数法格式的数字,不符合实际场景的使用要求。
举例代码如下:


type JsonUnmStruct struct {
	Id   interface{} `json:"id"`
	Name string      `json:"name"`
}

func Test_JsonUnmErr(t *testing.T) {
	var b = []byte(`
        {
        "id": 12423434, 
        "Name": "Tom"
        }
    `)

	var f JsonUnmStruct
	unmarshalErr := json.Unmarshal(b, &f)
	if unmarshalErr != nil {
		t.Fatal(unmarshalErr)
	}
	t.Logf("%+v", f)
}

实际上的输出结果是:

=== RUN Test_JsonUnmErr
json_unm_test.go:27: {Id:1.2423434e+07 Name:Tom}
— PASS: Test_JsonUnmErr (0.00s)

【Golang】解决使用interface{}解析json数字会变成科学计数法的问题_第1张图片

如果想要数字以不变的方式来进行序列化/反序列化,可以使用json.DecoderUseNumber方法,它会把所有的数字解析为json.Number类型的数(是数字的原始字符串的表示形式)
具体代码如下:

func Test_JsonUnmCorrect(t *testing.T) {
	var b = []byte(`
        {
        "id": 12423434, 
        "Name": "Tom"
        }
    `)
	d := json.NewDecoder(strings.NewReader(string(b)))
	d.UseNumber()
	var f JsonUnmStruct
	decodeErr := d.Decode(&f)
	if decodeErr != nil {
		t.Fatal(decodeErr)
	}
	t.Logf("%+v", f)
}

输出结果

=== RUN Test_JsonUnmCorrect
json_unm_test.go:44: {Id:12423434 Name:Tom}
— PASS: Test_JsonUnmCorrect (0.00s)

【Golang】解决使用interface{}解析json数字会变成科学计数法的问题_第2张图片

参考链接

你可能感兴趣的:(Go,#,项目-Bug解决,golang,json,数据库)