JSONJavaScript Object Notation不仅仅是一种数据格式它更像是一门“数据嵌套的艺术”。它的核心魅力在于通过简单的键值对和数组像搭积木一样构建出无限复杂的层级结构。基于之前对 MCP 工具定义JSON Schema的关注理解 JSON 的嵌套语法对于编写复杂的接口定义至关重要。以下是 JSON 及其嵌套语法的详细解读 JSON 的两大基石JSON 的数据结构主要由两种容器组成它们就像两个不同的“盒子”表格符号名称含义形象比喻键值对规则{ }对象表示一个实体或属性集合“字典”或“档案袋”必须是键: 值的形式键必须加双引号。[ ]数组表示一组有序的值“列表”或“排队”只有值没有键。值之间用逗号分隔。 嵌套的艺术套娃结构JSON 的强大之处在于嵌套对象里可以放数组数组里可以放对象对象里还可以再放对象。这正是 MCP 工具定义JSON Schema能够描述复杂参数的基础。1. 对象嵌套对象当你需要描述一个实体的详细细节时就会用到这种结构。场景一个用户包含一个“地址”信息而地址又包含“街道”和“邮编”。代码示例json{ name: 张三, address: { // 这里的值不再是简单的字符串而是一个新的对象 city: 北京, detail: 中关村大街1号 } }2. 对象嵌套数组当你需要描述一个实体拥有“多个”同类项时就会用到这种结构。场景一个用户有多个“爱好”。代码示例json{ name: 张三, hobbies: [篮球, 足球, 游泳] // 值是一个数组 }3. 数组嵌套对象最常见这是 API 返回数据列表时的标准格式。场景一个班级里有多个学生每个学生都是一个对象。代码示例json[ { name: 张三, score: 90 }, { name: 李四, score: 85 } ] 实战MCP 工具定义的嵌套解析你之前看到的 MCP 工具定义 JSON就是一个典型的多层嵌套对象。让我们用“嵌套”的视角重新审视它json{ name: calculate_tax, // 1. 第一层字符串值 description: 计算税费..., // 2. 第一层字符串值 inputSchema: { // 3. 第一层嵌套了一个对象 (inputSchema) type: object, // 第二层字符串值 properties: { // 第二层又嵌套了一个对象 (properties) price: { // 第三层键是 price值又是一个对象 type: number, // 第四层具体的参数定义 description: 价格 } }, required: [price] // 第二层嵌套了一个数组 (required) } }解读最外层{}是工具的本体。inputSchema里面套了一个{}定义了输入的规则。properties里面又套了{}定义了具体的字段。required里面套了[]定义了必填的清单。⚠️ 语法铁律避坑指南在编写嵌套 JSON 时必须遵守以下“铁律”否则解析会直接报错双引号是唯一的“合法”引号✅ 正确name: 张三❌ 错误name: 张三或name: 张三注意键名Key永远必须被双引号包裹。逗号不能乱加键值对之间必须用逗号,分隔。最后一个键值对后面绝对不能加逗号虽然有些解析器兼容但在标准 JSON 中是非法的。值不能为空冒号后面必须有值。如果你想表示“空”必须显式写出null。❌ 错误middleName:(冒号后什么都没有)✅ 正确middleName: null支持的数据类型有限值只能是字符串、数字、对象、数组、布尔值(true/false)、null。不支持函数、日期对象通常转为字符串、注释JSON 不支持//或/* */注释。 总结JSON 的嵌套语法其实就是“盒子里装盒子”的游戏。用{}来组织属性键值对。用[]来组织列表有序值。通过层层嵌套你可以描述从简单的“用户信息”到复杂的“MCP 工具协议”等任何数据结构