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类型相关推荐

  1. labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable

    最近在做MaskRCNN 在自己的数据(labelme)转为COCOjson格式遇到问题:TypeError: Object of type 'int64' is not JSON serializa ...

  2. JSON支持什么对象/类型?

    原文:JSON支持什么对象/类型? 当一个面试官问你: JSON都支持什么对象/类型?你怎么回答? 也许他的本意是下面这个答案: JSON格式支持的数据类型有以下: 类型 描述 Number 在Jav ...

  3. json中的值类型及输出对象的所有名称和对应的值

    json中的值类型共有8种,分别为nullValue, intValue,uintValue, realValue, stringValue,booleanValue, arrayValue, ojb ...

  4. json字符串和字典类型的相互转换(转载)

    转自:http://www.cnblogs.com/YUTOUYUWEI/p/5585863.html 在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库New ...

  5. 微信小程序之 打印json数据或者object类型的数据技巧

    你肯定会遇到过打印json数据或者object类型的数据的时候,看不到数据内容的情况,那么你可以往下看. https://www.jianshu.com/p/342478e4bf54

  6. 关于 pandas 解析 json 文件和其他类型文件的结果中日期格式数据类型不一致的问题

    问题: 我有两个文件,一个 .csv 文件和一个 .json 文件,数据截图分别如下: 我的目的是解析这些文件,并将结果统一交由下一个程序块进行处理. 在了解到 pandas 可以解析数据文件(csv ...

  7. JSON序列化导致Long类型被搞成Integer经典巨坑

    一.背景 最近遇到一个错误,就是某个字段肯定是Long类型的,通过Map<String,Object>方式转成JSON字符串,然后存到了DB的某个字段里. 为了Json存储字,然后反序列化 ...

  8. 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 ...

  9. Spring Boot 项目中Java对象的字符串类型属性值转换为JSON对象的布尔类型键值的解决方法及过程

    文章目录 场景描述 示例说明 解决历程 @JsonFormat是否能解决问题? 万能方案-调试 替代方案 补充知识 Java对象与JSON对象的序列化与反序列化 相关注解说明 后记 场景描述 在Spr ...

最新文章

  1. python 鸭子类型及三大特性
  2. sencha touch 模仿tabpanel导航栏TabBar(2013-11-7)
  3. Linux C :Linux 下第一个C程序
  4. android编译VTS测试组件
  5. 泽尼克多项式 matlab,zernike多项式 ---matlab程序 ---arrayfun.m函数
  6. Spring攻略学习笔记(13)------继承Bean配置
  7. c语言:简单的客户管理系统
  8. Jetson nano : PWM风扇调速。
  9. 有关Idea的Invalidate Caches/Restart
  10. 像韩寒一样活着 南方人物周刊(转)
  11. C# WPF如何设置oxyplot的折线图禁止鼠标滚轮缩放
  12. P1427 小鱼的数字游戏——栈的初次会面
  13. Infer静态分析-内存泄漏分析
  14. mysql high priv_MYSQL新特性secure_file_priv对读写文件的影响
  15. ineligible devices xcode6.3
  16. 12. 查询表product——查询库存商品中,最高单价、最低单价分别是多少
  17. CSS 背景图像 background-image属性
  18. 在 LaTeX 中定义变量
  19. android音频编辑之音频合成
  20. 一维离散小波变换原理和代码实现

热门文章

  1. java 导入导出txt文件_Java读取和写入txt文件
  2. Windows平台下动态链接库的总结
  3. excel实战应用案例100讲(四)-Excel玩转数据:从分析到可视化
  4. mysql aes密钥大于16位_aes秘钥限制问题解决办法
  5. 教你玩转CSS 导航栏
  6. ubuntu vim php配置文件在哪,ubuntu vim的配置文件在哪
  7. mysql判断数字的函数_Mysql必读MySql判断汉字、日期、数字的具体函数
  8. DictVectorizer中的fit_transform
  9. 【刷题】BZOJ 4176 Lucas的数论
  10. 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解