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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【2月更文挑战第9天】解决使用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)

在这里插入图片描述

如果想要数字以不变的方式来进行序列化/反序列化,可以使用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)

参考链接

目录
相关文章
|
11天前
|
存储 SQL 数据挖掘
TDengine 流计算与窗口机制的深度解析:揭示计数窗口的关键作用
在 TDengine 3.2.3.0 版本中,我们针对流式计算新增了计数窗口,进一步优化了流式数据处理的能力。本文将为大家解读流式计算与几大窗口的关系,并针对新增的计数窗口进行详细的介绍,帮助大家进一步了解 TDengine 流式计算,以便更好地进行应用。
23 1
|
2月前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
34 4
|
2月前
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
33 4
|
3月前
|
Go 开发者
|
3月前
|
监控 测试技术 API
|
3月前
|
编译器 Go 开发者
详尽解析:Golang 中的常量及其使用
【8月更文挑战第31天】
65 0
|
3月前
|
Go
[golang]jwt生成与解析
[golang]jwt生成与解析
150 0
|
3月前
|
JSON Go 数据格式
[golang]标准库-json
[golang]标准库-json
|
3月前
|
缓存 移动开发 Go
golang bufio解析
golang bufio解析
25 0
|
5月前
|
Go
golang解析excel、csv编码格式
golang解析excel、csv编码格式
47 4