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

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

参考链接

目录
相关文章
|
30天前
|
SQL 存储 JSON
SQL,解析 json
SQL,解析 json
62 8
|
16天前
|
存储 SQL 数据挖掘
TDengine 流计算与窗口机制的深度解析:揭示计数窗口的关键作用
在 TDengine 3.2.3.0 版本中,我们针对流式计算新增了计数窗口,进一步优化了流式数据处理的能力。本文将为大家解读流式计算与几大窗口的关系,并针对新增的计数窗口进行详细的介绍,帮助大家进一步了解 TDengine 流式计算,以便更好地进行应用。
25 1
|
2月前
|
JSON API 数据格式
requests库中json参数与data参数使用方法的深入解析
选择 `data`或 `json`取决于你的具体需求,以及服务器端期望接收的数据格式。
180 2
|
2月前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
107 9
|
29天前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
2月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
142 0
|
23天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
56 0
|
23天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
48 0
|
23天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
54 0
|
23天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
68 0