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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库表结构设计方法及原则「建议收藏」

    数据库表结构设计方法及原则「建议收藏」http://www.cnblogs.com/RunForLove/p/5693986.html  数据库设计的三大范式:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。  在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据

    2022年9月13日
    0
  • h264解码保存为yuv格式「建议收藏」

    h264解码保存为yuv格式「建议收藏」h264解码保存为yuv格式使用ffmpeg库从摄像头读取h264数据进行解码和显示,最后保存为yuv格式的文件,开发环境为QTCreater。程序流程图如下图所示:ffmpeg.h头文件如下:#ifndefFFMPEG_H#defineFFMPEG_H#include<QMainWindow>#include<QMutex>#include&l…

    2022年6月15日
    58
  • tomcat日志设置与详解

    tomcat日志设置与详解1&nbsp;&nbsp;&nbsp;Tomcat日志概述Tomcat日志信息分为两类:一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息。二是访问日志信息,它记录的访问的时间,IP,访问的资料等相关信息。2&nbsp;&nbsp;&nbsp;Tomcat日志配置2.1&nb…

    2022年6月20日
    114
  • Navicat MySQL 激活码【中文破解版】

    (Navicat MySQL 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    52
  • stm32的sdio接口_STM32F411

    stm32的sdio接口_STM32F411一、SDIO接口简介SDIO,全称:SecureDigitalInputandOutput,即安全数字输入输出接口。它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并可以连接SDIO接口设备,比如:蓝牙、WIFI、照相机等。SDIO和SD卡规范间的一个重要区别是增加了低速标准。低速卡的目标应用是以最小的硬件开支支持低速I/O能力。低速卡支持类似调制解调器、条码扫描仪和GPS接收器等应用。STM32的SDIO控制器支持多媒体卡(MMC卡)、SD存储卡、SDI/O卡和CE-ATA

    2022年10月3日
    0
  • redflag linux6.0 sp2桌面版,红旗Linux桌面版(Red Flag Linux)

    redflag linux6.0 sp2桌面版,红旗Linux桌面版(Red Flag Linux)第一次听说红旗Linux的“Favour”吗?现在的新名词太多,你作为第二个听说的人,一点也不落伍从09年起,针对Linux开源技术的发展特点,红旗Linux对个人版产品线做了重要调整,其中“Favour”版将尽可能把最新、最炫的DD呈现给关注开源技术的“红Fan家人”们,也希望获得更多爱好者对红旗Linux产品的关注、反馈和支持。红旗inWise操作系统V8.0是对系统软件包组件的升级和稳定性易…

    2022年8月20日
    4

发表回复

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

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