飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • JSON

    • JSON 是什么
    • JSON 的六种数据类型
    • 对象(Object)
    • 数组(Array)
    • 字符串(String)
    • 数字(Number)
    • 布尔值和 Null
    • 字符编码与转义
    • JSON 语法规则
    • 综合应用示例
  • JSONPath

    • JSONPath 是什么
    • 根标识符和基本路径
    • 名称选择器
    • 索引选择器
    • 通配符选择器
    • 数组切片选择器
    • 过滤器选择器(上)
    • 过滤器选择器(下)
    • 后代段
    • 函数扩展
    • JSONPath 综合实战

数字(Number)

什么是 JSON 数字?

JSON 的数字(Number) 直接写数字即可,不需要加引号。

JSON 的数字类型非常简洁——不区分整数、浮点数、长整型,所有数字统一都叫 Number。

简单示例

2018
12
-88
36.5
3.14159
1.4e9

数字的四种写法

根据 RFC 8259,JSON 数字有 4 种合法形式:

1. 整数

18
2018
100
1000
10000

规则:

  • 直接写数字,不加引号
  • 不允许前导零(01、007 是非法的)
  • 零本身写成 0
写法是否合法原因
2018✅ 合法正常整数
0✅ 合法零
-88✅ 合法负数
01❌ 非法不允许前导零
007❌ 非法不允许前导零

2. 小数(浮点数)

36.5
26.5
188.88
88.8
8.8
23.20
200.00
100.00
3.14159

规则:

  • 小数点前后都必须有数字
  • .5 和 5. 都是非法的
写法是否合法原因
36.5✅ 合法正常小数
188.88✅ 合法正常小数
.5❌ 非法小数点前必须有数字
5.❌ 非法小数点后必须有数字

3. 负数

-18
-2018
-88.8
-3.14159

规则:

  • 负号 - 只能写在数字最前面
  • 负号后面直接跟数字,不能有空格

4. 科学计数法

1.4e9
1.4E9
-2.5e10
3.14e-10

规则:

  • 用 e 或 E 表示"乘以 10 的几次方"
  • e 后面可以跟正号 + 或负号 -
  • e 后面必须跟整数
写法含义等于
1.4e91.4 × 10⁹1400000000
1.4E91.4 × 10⁹1400000000
-2.5e3-2.5 × 10³-2500
3.14e-23.14 × 10⁻²0.0314

JSON 数字 vs 字符串数字

非常重要:加引号的是字符串,不加引号的是数字!

{
  "yearString": "2018",
  "yearNumber": 2018,
  "priceString": "188.88",
  "priceNumber": 188.88
}
键值类型能否做数学运算
yearString"2018"字符串❌ 不能
yearNumber2018数字✅ 能
priceString"188.88"字符串❌ 不能
priceNumber188.88数字✅ 能

⚠️ 如果你把数字写成了字符串,程序在计算时可能会出错,或者把两个数字拼接起来而不是相加!


JSON 不支持这些数字

JSON 不支持以下特殊数值:

值说明JSON 替代方案
Infinity无穷大用字符串 "Infinity" 或 null
-Infinity负无穷大用字符串 "-Infinity" 或 null
NaN非数字用字符串 "NaN" 或 null
0x1A十六进制转成十进制写 26
0b1010二进制转成十进制写 10
1_000_000数字分隔符直接写 1000000

实战:飞翔科技场景中的数字

场景一:购物场景

{
  "scene": "购物",
  "vipLevel": 1,
  "minAge": 18,
  "productId": 10086,
  "quantity": 1000,
  "buyCount": 2,
  "orderId": 20251201123456,
  "imageFileSize": 5242880,
  "price": 188.88,
  "discount": 88.8,
  "shippingFee": 8.8,
  "discountRate": 0.314
}

场景二:旅游场景

{
  "scene": "旅游",
  "travelYear": 2018,
  "minHeight": 120,
  "maxWeight": 150,
  "dailyVisitorLimit": 10000,
  "ticketsSold": 5230,
  "worldPopulation": 8000000000,
  "chinaPopulation": 1400000000,
  "guangdongPopulation": 125000000,
  "morningTemp": 26.5,
  "noonTemp": 32.0,
  "ticketPrice": 100.00,
  "guideFee": 200.00,
  "moonDistance": 384400.12345
}

场景三:公司工资场景

{
  "scene": "工资",
  "deptCode": 2,
  "joinYear": 2018,
  "employeeAge": 28,
  "empId": 10001,
  "performanceScore": 100,
  "attendanceDays": 22,
  "companyAssets": 100000000000,
  "basicSalary": 8888.00,
  "performanceBonus": 18888.00,
  "managerSalary": 232000.00,
  "ceoSalary": 1000000.00,
  "socialSecurity": 2320.00,
  "personalTax": 1666.66,
  "accountBalance": 6666.66,
  "raiseRate": 1.414
}

场景四:医疗场景

{
  "scene": "医疗",
  "roomNumber": 6,
  "bloodType": 3,
  "patientAge": 18,
  "heartRate": 72,
  "diastolicBP": 80,
  "medicalId": 10086,
  "dailyVisits": 10000,
  "medicalInsuranceCoverage": 1400000000,
  "bodyTemp": 36.5,
  "systolicBP": 120.5,
  "drugPrice": 23.20,
  "treatmentCost": 200.00,
  "drugHalfLife": 3.14159
}

精度问题

RFC 8259 提到:JSON 数字的精度和范围取决于解析它的程序。

大多数程序使用 IEEE 754 双精度浮点数 来存储 JSON 数字,这意味着:

  • 整数范围:大约 ±9,007,199,254,740,991(约 ±9 千万亿)以内是精确的
  • 超过这个范围的整数可能会丢失精度
  • 极大或极小的数字建议用字符串表示
{
  "safeInteger": 9007199254740991,
  "unsafeInteger": 9007199254740993,
  "bigNumberAsString": "12345678901234567890"
}

💡 如果你需要处理非常大的数字(如银行账号、精确的大额金额),建议用字符串存储,避免精度丢失。


常见错误

错误写法问题正确写法
"2018"加了引号,变成字符串2018
01前导零非法1
5.小数点后缺数字5.0
.5小数点前缺数字0.5
1,000不能用逗号分隔1000
0xFF不支持十六进制255
Infinity不支持"Infinity" 或 null

一句话总结

提示

JSON 数字直接写,不加引号。支持整数、小数、负数、科学计数法。不支持前导零、十六进制、Infinity、NaN。大数字建议用字符串!

上一页
字符串(String)
下一页
布尔值和 Null