6. Numbers (数字)
数字的表示类似于大多数编程语言中使用的表示。数字以十进制表示,使用十进制数字。它包含一个整数部分(可能以减号作为前缀)、可选的小数部分和可选的指数部分。不允许前导零。
小数部分是小数点后跟一位或多位数字。
指数部分以字母E(大写或小写)开头,后面可以跟加号或减号。E和可选符号后跟一位或多位数字。
不能表示为JSON数字序列的数值(如无穷大 (Infinity) 和NaN)不得 (MUST NOT) 使用。
number = [ minus ] int [ frac ] [ exp ]
decimal-point = %x2E ; .
digit1-9 = %x31-39 ; 1-9
e = %x65 / %x45 ; e E
exp = e [ minus / plus ] 1*DIGIT
frac = decimal-point 1*DIGIT
int = zero / ( digit1-9 *DIGIT )
minus = %x2D ; -
plus = %x2B ; +
zero = %x30 ; 0
本规范允许实现对可接受数字的范围和精度设置限制。由于软件实现JSON数字作为IEEE 754二进制64(双精度,Double Precision)数字 [IEEE754] 是常见的,因此这通常是良好互操作性的情况。请注意,当此类软件用于读取JSON文本时,它可能会丢失某些数字的精度。
实施了任意精度算术的实现可能会期望通信它接受极大或极高精度的数字。接收JSON的实现可以 (MAY) 对其接受的数字的大小和精度设置限制,但必须 (MUST) 在IEEE 754二进制64双精度范围和精度内接受所有数字。
请注意,当使用此类软件时,整数且在范围 [-(253)+1, (253)-1] 内的数字是互操作的,因为实现将完全同意其数值。