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

    • 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 综合实战

JSON 语法规则

JSON 的六个结构字符

JSON 语法非常简单,核心只有 6 个结构字符:

字符名称用途
{左花括号开始一个对象
}右花括号结束一个对象
[左方括号开始一个数组
]右方括号结束一个数组
:冒号分隔键和值
,逗号分隔多个元素

记住这 6 个字符,你就掌握了 JSON 的全部"标点符号"!


空白字符

JSON 允许在任意位置插入空白字符,让代码更易读。

合法的空白字符

字符名称写法
空格Space按空格键
制表符Tab按 Tab 键
换行Line Feed按回车键
回车Carriage ReturnWindows 换行

示例:紧凑 vs 格式化

紧凑写法(合法但难读):

{"company":"广州飞翔科技","employees":[{"name":"航仔","department":"技术部"},{"name":"图妹","department":"产品部"}]}

格式化写法(推荐):

{
  "company": "广州飞翔科技",
  "employees": [
    {
      "name": "航仔",
      "department": "技术部"
    },
    {
      "name": "图妹",
      "department": "产品部"
    }
  ]
}

两种写法在程序眼中完全等价,但格式化的版本人类更容易阅读。

💡 实际开发中,传输时通常用紧凑格式(省流量),编辑时用格式化格式(易阅读)。


JSON 文本的根结构

根据 RFC 8259,JSON 文本可以是以下任何一种:

根类型示例说明
对象{"name":"航仔"}最常用
数组["航仔","图妹"]也很常用
字符串"飞翔科技"合法但较少见
数字2018合法但较少见
布尔值true合法但较少见
nullnull合法但较少见

💡 虽然规范允许任何值作为根,但实际 API 设计中,根通常是对象或数组。


常见语法错误排查

错误 1:键名不加双引号

❌ { name: "航仔" }
✅ { "name": "航仔" }

原因:JSON 的键必须是字符串,字符串必须用双引号包裹。

错误 2:使用单引号

❌ { 'name': '航仔' }
✅ { "name": "航仔" }

原因:JSON 只认双引号,不认单引号。单引号是 JavaScript 的特性,不是 JSON 的。

错误 3:末尾多余逗号

❌ { "name": "航仔", "age": 28, }
✅ { "name": "航仔", "age": 28 }

❌ ["航仔", "图妹", ]
✅ ["航仔", "图妹"]

原因:最后一个元素后面不能加逗号。这是很多新手最容易犯的错误!

错误 4:缺少逗号

❌ { "name": "航仔" "age": 28 }
✅ { "name": "航仔", "age": 28 }

❌ ["航仔" "图妹"]
✅ ["航仔", "图妹"]

原因:多个键值对或多个数组元素之间必须用逗号分隔。

错误 5:括号不匹配

❌ { "name": "航仔" ]
✅ { "name": "航仔" }

❌ [ "航仔", "图妹" }
✅ [ "航仔", "图妹" ]

原因:对象用花括号 {},数组用方括号 [],不能混用。

错误 6:数字前导零

❌ { "month": 06 }
✅ { "month": 6 }

原因:JSON 数字不允许前导零(0 本身除外)。

错误 7:注释

❌ {
  // 这是公司名称
  "company": "飞翔科技"
}

❌ {
  /* 这是公司名称 */
  "company": "飞翔科技"
}

原因:JSON 不支持任何注释!如果需要注释,可以在外部文档里写。

错误 8:undefined

❌ { "value": undefined }
✅ { "value": null }

原因:JSON 没有 undefined,用 null 代替。


JSON 校验工具

写 JSON 时,可以用在线工具检查语法是否正确:

  1. JSONLint (jsonlint.com) — 最经典的 JSON 校验工具
  2. JSON Formatter & Validator — 格式化 + 校验
  3. VS Code — 自带 JSON 语法检查,错误会标红

一个合法的完整 JSON 示例

{
  "company": "广州飞翔科技",
  "website": "www.feixiang.net",
  "established": 2018,
  "isActive": true,
  "departments": [
    {
      "name": "技术部",
      "headcount": 5,
      "members": [
        { "name": "航仔", "position": "后端开发", "isActive": true },
        { "name": "翼王", "position": "架构师", "isActive": true },
        { "name": "凌叔", "position": "运维工程师", "isActive": true },
        { "name": "空少", "position": "前端开发", "isActive": true },
        { "name": "风速", "position": "算法工程师", "isActive": false }
      ]
    },
    {
      "name": "产品部",
      "headcount": 3,
      "members": [
        { "name": "图妹", "position": "产品经理", "isActive": true },
        { "name": "星宇", "position": "产品助理", "isActive": true },
        { "name": "靓晴", "position": "UI设计师", "isActive": true }
      ]
    },
    {
      "name": "运营部",
      "headcount": 4,
      "members": [
        { "name": "鸣哥", "position": "内容运营", "isActive": true },
        { "name": "雁姐", "position": "用户运营", "isActive": true },
        { "name": "波比", "position": "活动运营", "isActive": true },
        { "name": "云吞", "position": "社群运营", "isActive": true }
      ]
    }
  ],
  "totalEmployees": 12,
  "slogan": "愿你朝华相顾,愿你前程似锦。"
}

JSON 与 JavaScript 对象的区别

很多人混淆 JSON 和 JavaScript 对象,关键区别如下:

特性JSONJavaScript 对象
键名引号必须双引号可以不加引号
字符串引号必须双引号单双引号都可以
末尾逗号不允许允许
注释不支持支持
函数不支持支持
undefined不支持支持
变量不支持支持
// 这是 JavaScript 对象(不是 JSON!)
const person = {
  name: '航仔',        // 键没加引号
  age: 28,             // 数字
  isActive: true,      // 布尔值
  hobby: undefined,    // JSON 不支持
  sayHi: function() {}, // JSON 不支持函数
  // 这是注释,JSON 不支持
};

// 这才是 JSON 字符串
const jsonString = '{"name":"航仔","age":28,"isActive":true}';

一句话总结

提示

JSON 语法只有 6 个核心字符:{}[]:,。记住:键用双引号、逗号分隔、末尾不加逗号、不支持注释、不支持单引号!

上一页
字符编码与转义
下一页
综合应用示例