1.1 JSON语法规范介绍

时间:2025-02-12 16:43:55

一、JSON基本结构

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,由两种基础结构组成:

  1. 键值对集合{ ... } 表示对象(Object)
  2. 有序值列表[ ... ] 表示数组(Array)

二、JSON数据类型

1. 对象(Object)
  • 语法{ "key1": value1, "key2": value2 }
  • 规则
    • 键名必须用双引号包裹(单引号无效)
    • 键值对用冒号 : 分隔
    • 多个键值对用逗号 , 分隔
    • 最后一个键值对不能有尾随逗号

示例

{
  "name": "张三",
  "age": 30,
  "isStudent": false
}

2. 数组(Array)
  • 语法[ value1, value2, value3 ]
  • 规则
    • 值之间用逗号 , 分隔
    • 最后一个元素不能有尾随逗号
    • 支持嵌套(对象/数组混合)

示例

["apple", "banana", { "type": "fruit" }]

3. 值(Value)

JSON值可以是以下6种类型:

  1. 字符串(String)"text"
  2. 数字(Number)1233.14-5e3
  3. 布尔值(Boolean)truefalse
  4. 空值(Null)null
  5. 对象(Object)
  6. 数组(Array)

三、字符串(String)规范

  • 必须用双引号包裹"Hello"
  • 转义字符
    转义序列 含义
    \" 双引号
    \\ 反斜杠
    \/ 正斜杠
    \b 退格符
    \f 换页符
    \n 换行符
    \r 回车符
    \t 制表符
    \uXXXX Unicode字符

示例

{
  "message": "Hello,\n\"World\"!",
  "unicode": "\u03A9"  // 表示希腊字母Ω
}

四、数字(Number)规范

  • 合法格式
    • 整数:42
    • 负数:-10
    • 小数:3.1415
    • 科学计数法:2e3(=2000)、1.5E-4
  • 禁止格式
    • 前导零(0123 非法,除非是 0
    • 十六进制(0xFF 非法)
    • NaN/Infinity(需转为字符串表示)

示例

{ "price": 9.99, "quantity": -5, "speed": 3e8 }

五、空白字符处理

  • 合法空白符:空格( )、制表符(\t)、换行符(\n)、回车符(\r
  • 作用:用于格式化(不影响数据解析)
  • 禁止位置
    • 键名内部(" first " 非法)
    • 数值内部(12 3 非法)

示例

{
  "valid":   [   1,   2   ],  // 合法
  "invalid": [ 1 , , 2 ]      // 非法(中间多余逗号)
}

六、JSON vs JavaScript对象

虽然JSON源自JavaScript,但存在关键区别:

特性 JSON JavaScript对象
键名引号 必须双引号 可省略引号
数值格式 禁止NaN/Infinity 允许
注释 不支持 支持
尾随逗号 禁止 允许(ES5+)

七、常见错误示例

  1. 键名未用双引号

    { name: "张三" }  // 错误!
    
  2. 尾随逗号

    { "a": 1, "b": 2, }  // 错误!
    
  3. 非法数值

    { "value": NaN }      // 错误!
    
  4. 注释使用

    { /* 注释 */ "key": "value" }  // 错误!
    

八、JSON语法验证工具

  • 在线验证:https://jsonlint.com/
  • IDE插件:VS Code、IntelliJ JSON支持
  • 命令行工具:jq(Linux/Mac)

掌握这些规范可避免90%的JSON解析错误!如需深入学习,可参考 RFC 8259 官方文档