int64 java_为什么json 不能使用 int64类型
json 简介
jsON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集 。 JSON采用完全独立于语言的文本格式,但是也使用了类似于 C语言 家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
JSON支持两种数据结构存在:
对象(object):一个对象包含一系列非排序的名称/值对(pair),一个对象以{开始,并以}结束。每个名称/值对之间使用 : 分割。
数组 (array):一个数组是一个值(value)的集合,一个数组以 [ 开始,并以]结束。数组成员之间使用 , 分割。 具体的格式如下:
[value1, value2, value3]
名称/值(pair):名称和值之间使用 : 隔开,格式如下:
{name:value}
名称必须是字符串类型; 值(value)必须是可以是字符串(string),数值(number),对象(object),有序列表(array),或者 false, null, true 的其中一种。
JSON的格式描述可以参考RFC 4627。
资源搜索网站大全 https://www.renrenfan.com.cn
为什么JSON不支持 int64 类型?
通过上面的介绍有两个关键点:
JSON 是基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集
JSON 支持number 类型
Javascript的数字存储使用了IEEE 754中规定的双精度浮点数数据类型,而这一数据类型能够安全存储 -(2^53-1) 到 2^53-1 之间的数值(包含边界值)。JSON 是 Javascript 的一个子集,所以它也遵守这个规则。
以下是rfc7159的说明:
Note that when such software is used, numbers that are integers and are in the range [-(2^53)+1, (2^53)-1] are interoperable in the sense that implementations will agree exactly on their numeric values.
这两个边界值可以通过 JavaScript 的 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 获取。
安全存储的意思是指能够准确区分两个不相同的值,比如,253 - 1 是一个安全整数,它能被精确表示,在任何 IEEE-754 舍入模式(rounding mode)下,没有其他整数舍入结果为该整数。作为对比,253 就不是一个安全整数,它能够使用 IEEE-754 表示,但是 253 + 1 不能使用 IEEE-754 直接表示,在就近舍入(round-to-nearest)和向零舍入中,会被舍入为 253。 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 将得到 true的结果,而这在数学上是错误的。 同样 105308320612483198 === 105308320612483200 结果也是true
int64 类型的数值范围是 -(2^63-1) 到 2^63-1。使用int64 类型json 对于超出范围的数字,会出现解析错误的情况。
一个建议:对于大数字来说,使用str 是一个好的选择。或者用类似这样的结构:
{"int": 105308320612483198, "int_str": "105308320612483198"}
在json 中使用的时候 使用 int_str 属性。
python 对json 的处理
python 中 int 类型值远远超过IEEE 754 中定义的双精度值的范围,所以对于在 python 中使用的json数据,可以使用放心使用 int64 类型(python中的long )。但是如果序列化后的数据要被其它语言的解析器(比如:JavaScript的解析器)解析的时候,就要当心数值是不是超出了安全数的范围。如果超出,这里推荐使用字符串类型来代替数值类型。
int64 java_为什么json 不能使用 int64类型相关推荐
- labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
最近在做MaskRCNN 在自己的数据(labelme)转为COCOjson格式遇到问题:TypeError: Object of type 'int64' is not JSON serializa ...
- JSON支持什么对象/类型?
原文:JSON支持什么对象/类型? 当一个面试官问你: JSON都支持什么对象/类型?你怎么回答? 也许他的本意是下面这个答案: JSON格式支持的数据类型有以下: 类型 描述 Number 在Jav ...
- json中的值类型及输出对象的所有名称和对应的值
json中的值类型共有8种,分别为nullValue, intValue,uintValue, realValue, stringValue,booleanValue, arrayValue, ojb ...
- json字符串和字典类型的相互转换(转载)
转自:http://www.cnblogs.com/YUTOUYUWEI/p/5585863.html 在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库New ...
- 微信小程序之 打印json数据或者object类型的数据技巧
你肯定会遇到过打印json数据或者object类型的数据的时候,看不到数据内容的情况,那么你可以往下看. https://www.jianshu.com/p/342478e4bf54
- 关于 pandas 解析 json 文件和其他类型文件的结果中日期格式数据类型不一致的问题
问题: 我有两个文件,一个 .csv 文件和一个 .json 文件,数据截图分别如下: 我的目的是解析这些文件,并将结果统一交由下一个程序块进行处理. 在了解到 pandas 可以解析数据文件(csv ...
- JSON序列化导致Long类型被搞成Integer经典巨坑
一.背景 最近遇到一个错误,就是某个字段肯定是Long类型的,通过Map<String,Object>方式转成JSON字符串,然后存到了DB的某个字段里. 为了Json存储字,然后反序列化 ...
- Go语言常见类型转换(int、int32,int64,float32、float64与string类型互转)
int与string int转string str = strconv.Itoa(i.(int)) string转int num,err = strconv.Atoi(i.(string)) int3 ...
- Spring Boot 项目中Java对象的字符串类型属性值转换为JSON对象的布尔类型键值的解决方法及过程
文章目录 场景描述 示例说明 解决历程 @JsonFormat是否能解决问题? 万能方案-调试 替代方案 补充知识 Java对象与JSON对象的序列化与反序列化 相关注解说明 后记 场景描述 在Spr ...
最新文章
- python 鸭子类型及三大特性
- sencha touch 模仿tabpanel导航栏TabBar(2013-11-7)
- Linux C :Linux 下第一个C程序
- android编译VTS测试组件
- 泽尼克多项式 matlab,zernike多项式 ---matlab程序 ---arrayfun.m函数
- Spring攻略学习笔记(13)------继承Bean配置
- c语言:简单的客户管理系统
- Jetson nano : PWM风扇调速。
- 有关Idea的Invalidate Caches/Restart
- 像韩寒一样活着 南方人物周刊(转)
- C# WPF如何设置oxyplot的折线图禁止鼠标滚轮缩放
- P1427 小鱼的数字游戏——栈的初次会面
- Infer静态分析-内存泄漏分析
- mysql high priv_MYSQL新特性secure_file_priv对读写文件的影响
- ineligible devices xcode6.3
- 12. 查询表product——查询库存商品中,最高单价、最低单价分别是多少
- CSS 背景图像 background-image属性
- 在 LaTeX 中定义变量
- android音频编辑之音频合成
- 一维离散小波变换原理和代码实现
热门文章
- java 导入导出txt文件_Java读取和写入txt文件
- Windows平台下动态链接库的总结
- excel实战应用案例100讲(四)-Excel玩转数据:从分析到可视化
- mysql aes密钥大于16位_aes秘钥限制问题解决办法
- 教你玩转CSS 导航栏
- ubuntu vim php配置文件在哪,ubuntu vim的配置文件在哪
- mysql判断数字的函数_Mysql必读MySql判断汉字、日期、数字的具体函数
- DictVectorizer中的fit_transform
- 【刷题】BZOJ 4176 Lucas的数论
- 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解