golang 未指定类型interface{} 类型的 int类型数据json.Unmarshal 解码后变成float64类型问题解决方法

golang内置的json反序列化方法,默认情况下对应 未指定类型interface{} 类型的的 int类型数据在经过Unmarshal解码后 int类型的数据会变成 float64类型。 因为json里面默认将interface{}类型的int数据都当做float64来处理。   解决方法很简单,就是使用自定义的解码器,然后调用解码器中的 UseNumber()方法即可。

    // 使用自定义的json解码jdecoder := json.NewDecoder(bytes.NewReader(bdata))jdecoder.UseNumber() // 使用数字解码JSON数据,避免 int 类型数据变成float64类型err = jdecoder.Decode(m)if err != nil {return err}

这里的 bdata是你json编码后的字节切片  bdata, err := json.Marshal(data)  【此处的data 则是任何可被 json.Marshal序列化的数据】

注意在使用了.UseNumber() 方法后,数据中所有的interface{}类型的 int 类型数据都会被转换为 json.Number类型输出。

这个json.Number是json里面定义的一个类型,他有3个方法,即

type Number stringfunc (n json.Number) Float64() (float64, error)
func (n json.Number) Int64() (int64, error)
func (n json.Number) String() string  // 这个String()是对象的字符串输出接口的实现

我们在使用.UseNumber() 方法后可根据我们的需要对这个类型进行一个转换处理,如果不处理直接输出的话就是字符串, 如果想要变成int64输出,则需要调用哦 Int64方法进行转换。

转换示例:


// 对val类型进行断言,如果是json.Number才进行处理
if v, ok := val.(json.Number); ok {// 调用json.Number中的Int64()方法转换数据类型为int64if i64v, err := v.Int64(); err == nil {// 修改你序列化后的数据为这里的i64v  即 int64类型//....}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优盘有盘符显示0字节:故障解析与数据恢复策略

一、优盘有盘符显示0字节现象描述 在使用优盘的过程中,我们有时会遇到一种令人困惑的情况:插入优盘后,电脑能正常识别到优盘的盘符,但当我们尝试访问其中的数据时,却发现优盘的容量显示为0字节,无法读取或…

快速掌握MyBatis

MyBatis 是一个流行的 Java 持久层框架,它提供了一种半自动的 SQL 映射方式,使得开发者能够更加灵活地编写 SQL 语句,同时避免了传统 JDBC 代码的冗余和复杂性。下面进行简要概述: MyBatis 快速掌握 核心概念:理解 My…

8.1 Firmware Update Process

8.1 Firmware Update Process 通过reset激活firmware 更新的过程: host发出firmare下载命令,将FW image下载到控制器。FW image可能有多个部分要下载,因此FW image 下载命令中指定正在下载的FW image的每个部分的偏移量。FW image 下载命令…

Sui创始团队在竞速环节中的快问快答

在Sui Basecamp活动期间,Sui区块链的最初贡献者在Oracle红牛赛车模拟器上展示了他们的技术能力,在驾驶圈时回答了有关Sui的问题。 Evan Cheng(又名Revvin’ Evan)在解释Mysticeti创下区块链最终性记录的同时保持着他的驾驶线路。…

Java | Leetcode Java题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution {void dfs(char[][] grid, int r, int c) {int nr grid.length;int nc grid[0].length;if (r < 0 || c < 0 || r > nr || c > nc || grid[r][c] 0) {return;}grid[r][c] 0;dfs(grid, r - 1, c);dfs(grid, r…

go Channel原理 (三)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

【嵌入式——FreeRTOS】任务

【嵌入式——FreeRTOS】任务 任务创建和删除动态方式创建任务静态方式创建任务 删除任务任务切换调度器任务切换流程 任务挂起任务恢复相关API函数 任务创建和删除 动态方式创建任务 任务的任务控制块以及任务的栈空间所需的内存&#xff0c;均由freeRTOS从freeRTOS管理的堆中…

c#asp.net中字典的使用

字典是一个键值对&#xff0c;可以用来保存数据&#xff0c;再查询&#xff1b; 下面是一个案例&#xff1a;依据多个学号查询多个学生的姓名&#xff0c;只能到数据库查询一次数据&#xff01;&#xff01;&#xff01; 先在数据库查询学号对应的学生&#xff0c;把数据保存在…

mysql8.0.19安装zip版本

下载地址https://downloads.mysql.com/archives/community/ 下载版本 下载后解压&#xff0c;不包括data 和my.ini文件。其中data 文件是自动生成的【mysqld --initialize --console】&#xff0c;my.ini需要自己编写设置。 新建my.ini文件 需要自己设置 basedirG:\soft\mysql…

内网服务器时间校正

新购买的云服务器发现内网机器和可以访问外网的机器时间慢了三分钟&#xff0c;导致有些访问会报错&#xff0c;那么我们配置一下ntp校正一下时间。外网配置起来比较简单&#xff0c;直接下载ntp执行校正命令即可。 比当前时间慢了三分钟 注意当前服务器是可以访问外网的机器这…

【gitee使用教程】(创建项目仓库并上传代码简易版)

gitee使用教程&#xff0c;创建项目仓库并上传代码简易版 1.在码云上创建一个仓库2.将代码克隆到本地1.复制仓库地址2.找到你想要放置的文件位置&#xff0c;右键点击更多选项&#xff0c;选择Git Clone3.将复制的仓库地址填入URL 3. IDEA结合GIT和Gitee的简单使用idea需要识别…

【python】最新版抖音s逆向拿到数据,非常详细教程(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Excel 宏录制与VBA编程 ——VBA编程技巧篇一 (Union方法、Resize方法、Cells方法、UseSelect方法、With用法)

Uniom方法 使用Union方法可以将多个非连续区域连接起来成为一个区域&#xff0c;从而可以实现对多个非连续区域一起进行操作。 Resize方法 使用Range对象的Resize属性调整指定区域的大小&#xff0c;并返回调整大小后的单元格区域。 Cells方法 Cells属性返回一个Range对象。 Us…

Domino应用中的HTML5

大家好&#xff0c;才是真的好。 在xpages多年不见有效更新&#xff0c;前景不明的时候&#xff0c;Domino传统Web应用开发方式还是受到了应有的青睐。毕竟&#xff0c;在Nomad Web时代&#xff0c;连最传统的Notes CS原生应用也突然焕发了勃勃生机一样。 但&#xff0c;对有…

什么是strcmp函数

目录 开头1.什么是strcmp函数2.strcmp函数里的内部结构3.strcmp函数的实际运用(这里只列举其一)脑筋急转弯 结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要来认识一下C语言中的strcmp函数。 1.什么是strcmp函数 strcmp函数来自于C语言中的头文件<str…

ARP 原理详解 一

ARP 原理 ARP&#xff08;Address Resolution Protocol&#xff09;地址解析协议&#xff0c;是根据 IP 地址获取物理地址的一个 TCP/IP 协议。 OSI 网络七层模型中&#xff0c;IP 地址在 OSI 模型第三层&#xff0c;MAC 地址在第二层&#xff0c;彼此不直接通信。 在通过以…

Spring Cloud Alibaba AI 大模型使用示例

1 pom.xml, 注意版本(jdk17) &#xff0c;仓库地址&#xff0c;排除的依赖&#xff08;日志错误&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www…

性能测试中的场景设计和测试执行

假设一个内部系统要求响应时间在 3s 以内&#xff0c;支持最大用户数为4万。根据二八原则&#xff0c;80%用户在20%时间使用系统(4w80%)/(24h20%)≈1.9点击/秒。并发数TPS&#xff08;运行时间思考时间&#xff09;1.9&#xff08;30.50.330.50.30.53&#xff09;21。 注意&am…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行&#xff0c;我高中时学过集合&#xff0c;不知道有什么用&#xff0c;毫无兴趣&#xff0c;等到我学了一门编程语言后&#xff0c;才发现集合真的很有用&#xff1b;可以去重&#xff0c;可以看你有我没有的&#xff0c;可以看我有你没有的&#xf…

毫米波雷达深度学习技术-1.7训练一个神经网络

1.7 训练一个神经网络 对于训练神经网络&#xff0c;有两个步骤&#xff0c;即前向传递和误差反向传播。 1.7.1 前向传播和反向传播 在前向传递中&#xff0c;输入被馈送到模型并与权重向量相乘&#xff0c;并为每一层添加偏差以计算模型的输出。密集层或全连接层第l层的输入、…