golang中的json decode丢失精度的问题

golang中的json decode丢失精度的问题最近发现的一个坑当用enconding/json包的时候,数字默认是处理为float64类型的,这就导致了int64可能会丢失精度,这时候要用dec.UseNumber将处理的数字转换成json.Number的形式,再自己去做typeassertion代码packagemainimport( "fmt" "encoding/json" "strings")funcCr…

大家好,又见面了,我是你们的朋友全栈君。

最近发现的一个坑
当用enconding/json包的时候,数字默认是处理为float64类型的,这就导致了int64可能会丢失精度,这时候要用dec.UseNumber将处理的数字转换成json.Number的形式,再自己去做type assertion
代码

package main

import (
	"fmt"
	"encoding/json"
	"strings"
)

func CreateJsonUseNum(source string) map[string]interface{} {
	data := map[string]interface{}{}
	dec := json.NewDecoder(strings.NewReader(source))
	dec.UseNumber()
	dec.Decode(&data)
	return data
}

func CreateJson(source string) map[string]interface{} {
	data := map[string]interface{}{}
	dec := json.NewDecoder(strings.NewReader(source))
	dec.Decode(&data)
	return data
}

func main() {
        strMap := `{"test": true,"id":6653078421906374662}`
	p := CreateJson(strMap)
	p2 := CreateJsonUseNum(strMap)
	fmt.Println(p)
	fmt.Println(p2)
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160665.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jlink-10 pin 的定义(stm32使用)官方定义

    Jlink-10 pin 的定义(stm32使用)官方定义因为在网上找了好久才找到正确的接法,所以专门记载了下来,因为stm32芯片这几个功能引脚会内置上拉电阻,所以不需要再外接电阻了。转载于:https://www.cnblogs.com/dzswise/p/7523420.html…

    2022年5月28日
    24
  • java中级面试题及答案_Java中级面试题

    java中级面试题及答案_Java中级面试题一、Java笔试题基础1.Java中的异常有哪几类?分别怎么使用?检出异常,非检出异常。检出异常需要try…catch才能编译通过。非检出异常不用try…catch也能编译通过。RuntimeException是非检出异常,不需要try…catch也能编译通过。IoException,SQLException等等其他所有异常都是检出异常,必须要try…catach才能编译通过。2.常用的集合类有哪些?比如List如何排序?分两种,一种实现Set接口,一种是实现List接口的。Set:Tre

    2022年10月12日
    1
  • python怎么安装pandas库_panda 数据处理

    python怎么安装pandas库_panda 数据处理开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍。Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且里面还集成了很多Python科学计算的第三方库。比如我们需要用到的Pandas、numpy、dateutil等等,高达几百种。因此,安装了Anaconda,就不需要再专门的一个个安装第三方库。只要在使…

    2022年8月27日
    0
  • 达梦数据库_达梦的数据库什么水平

    达梦数据库_达梦的数据库什么水平达梦(DM8)数据库由实例和数据库共同组成。实例由一组正在运行的后台进程及其所fork出的一系列线程和分配内存组成。数据库是由一系列存放在操作系统上的文件组成。体系结构图大致为:本文只要针对体系结构中的实例,也就是达梦(DM8)数据库中内存结构与线程结构进行介绍。1.内存池达梦(DM8)实例内存池包括运行时内存和共享内存池组成,可以通过查询动态视图V$MEM_POOL查看当前数据库系统中所有内存池的状态:1.1共享内存池数据库运行时的主要内存池,由数据库参数文件dm.ini中的参数MEMO

    2022年10月19日
    0
  • 最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 – 欧普软件园…

    最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 – 欧普软件园…安卓java模拟器是一款十分好用的游戏模拟器,在这款软件里面你能够看到海量的游戏内容,各种2D、3D的游戏玩,无需你下载,直接在模拟器里面就可以开启你的游戏模式了。虚拟按键的设置也是十分简单的,快来下载享受游戏带来的快乐吧!安卓java模拟器软件介绍J2ME模拟器Android版J2MELoader是一个Android版的J2ME(Java2MicroEdition)模拟器。它支持大多数的…

    2022年7月7日
    33
  • python机器视觉opencv_opencv轻松入门:面向python电子版

    python机器视觉opencv_opencv轻松入门:面向python电子版以下是快速学完OpenCV+python计算机视觉图像处理的个人总结。任何知识或者学科都不可能快速学会,一口吃不成大胖子,想要学会,只能一点一点积累。不积跬步无以至千里,不敲千遍无可能懂理。想要学会,不能光看,须知熟才能生巧,一定要多敲!一定要多敲!一定要多敲!视频链接请点击这里代码连接请点击这里,提取码:iukw看完视频一定要手动敲,不然最后只是眼睛会了,脑子和手却不会。以下是Windows、Linux、Mac深度学习环境搭建详细教程:1、windows搭建深度学习环境详细教程2、L

    2022年9月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号