JSON 语法
JSON 语法详解
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其语法简单且严格。以下是对 JSON 语法的详细中文讲解,涵盖所有规则、数据类型和示例,力求清晰易懂。
1. JSON 的基本结构
JSON 数据由两种主要结构组成:
- 对象(Object):
- 用花括号
{}
包裹。 - 包含一组键值对,键和值之间用冒号
:
分隔,键值对之间用逗号,
分隔。 - 键必须是字符串(用双引号
""
包裹),值可以是多种数据类型。 - 示例:
json { "name": "张三", "age": 25 }
- 数组(Array):
- 用方括号
[]
包裹。 - 包含一组有序的值,值之间用逗号
,
分隔。 - 值可以是任意 JSON 支持的数据类型。
- 示例:
json ["苹果", "香蕉", 42]
2. JSON 支持的数据类型
JSON 支持以下六种数据类型:
- 字符串(String):
- 用双引号
""
包裹,支持 Unicode 字符和转义字符(如\n
、\t
、\"
)。 - 示例:
json "Hello, 世界!"
- 注意:单引号
'
不合法。
- 数字(Number):
- 支持整数、浮点数和科学计数法。
- 不区分整数和浮点数,直接写数字即可。
- 示例:
json 42 -3.14 1.23e4
- 布尔值(Boolean):
- 仅支持
true
和false
。 - 示例:
json true
- 空值(Null):
- 表示空值,用
null
表示。 - 示例:
json null
- 对象(Object):
- 嵌套的对象,键值对形式。
- 示例:
json { "address": { "city": "北京", "zip": "100000" } }
- 数组(Array):
- 有序的值列表,支持嵌套。
- 示例:
json [1, "test", {"id": 1}, [2, 3]]
3. JSON 语法规则
JSON 的语法非常严格,以下是必须遵守的规则:
- 键必须是字符串:
- 对象的键必须用双引号包裹,例如
"key"
,不能用单引号或无引号。 - 错误示例:
json { key: "value" } // 错误:键缺少双引号 { 'key': "value" } // 错误:单引号不合法
- 值类型限制:
- 值必须是上述六种类型之一,不支持函数、日期对象、undefined 等 JavaScript 特有类型。
- 错误示例:
json { "date": new Date() } // 错误:JSON 不支持 Date 对象
- 分隔符:
- 键值对之间用冒号
:
分隔。 - 多个键值对或数组元素之间用逗号
,
分隔。 - 最后一个键值对或数组元素后不能加逗号(否则会导致语法错误)。
- 错误示例:
json { "name": "李四", "age": 30, // 错误:最后一个键值对后多余逗号 }
- 空白字符:
- JSON 支持空格、制表符(
\t
)、换行符(\n
)等空白字符,用于格式化,但不影响数据内容。 - 示例:
json { "name": "王五", "age": 28 }
- 转义字符:
- 字符串中支持以下转义字符:
\"
:双引号\\
:反斜杠\n
:换行\t
:制表符\uXXXX
:Unicode 字符(XXXX 是四位十六进制数)
- 示例:
json { "message": "Hello\nWorld", "unicode": "\u4E16\u754C" // 表示“世界” }
- 不支持注释:
- JSON 不支持任何形式的注释(例如
//
或/* */
)。 - 错误示例:
json { "name": "张三" // 这是一个名字 // 错误:JSON 不支持注释 }
4. 完整 JSON 示例
以下是一个包含多种数据类型的 JSON 示例,展示了嵌套结构:
{
"user": {
"name": "赵六",
"age": 22,
"isStudent": true,
"email": null,
"hobbies": ["读书", "旅行", "编程"],
"address": {
"city": "上海",
"zip": "200000",
"coordinates": [121.4737, 31.2304]
},
"scores": [
{"subject": "数学", "score": 95},
{"subject": "英语", "score": 88}
]
}
}
说明:
- 包含对象(
user
、address
)、数组(hobbies
、coordinates
、scores
)、字符串、数字、布尔值和空值。 - 结构清晰,支持多层嵌套。
5. 在 Node.js 中验证 JSON 语法
在 Node.js 中,可以使用 JSON.parse
检查 JSON 字符串是否符合语法规则:
const jsonString = `{
"name": "张三",
"age": 25
}`;
try {
const obj = JSON.parse(jsonString);
console.log("JSON 语法正确:", obj);
} catch (error) {
console.error("JSON 语法错误:", error.message);
}
- 如果 JSON 字符串有语法错误(如多余逗号或单引号),
JSON.parse
会抛出SyntaxError
。 - 建议始终使用
try-catch
捕获解析错误。
6. 常见 JSON 语法错误
- 多余的逗号:
{"name": "李四",} // 错误:对象末尾多余逗号
["a", "b",] // 错误:数组末尾多余逗号
- 单引号:
{'name': '李四'} // 错误:键和值必须用双引号
- 不支持的数据类型:
{"func": function(){}} // 错误:JSON 不支持函数
{"date": 2025-07-28} // 错误:日期格式不合法
- 缺失双引号:
{name: "张三"} // 错误:键必须用双引号
7. JSON 格式化工具
- 在线工具:JSONLint(jsonlint.com)、JSON Formatter(jsonformatter.org)可验证和格式化 JSON。
- Node.js 格式化:使用
JSON.stringify(obj, null, 2)
格式化输出,便于阅读:
const obj = { name: "王五", age: 28 };
console.log(JSON.stringify(obj, null, 2));
// 输出:
// {
// "name": "王五",
// "age": 28
// }
8. JSON 与 MongoDB
在 Node.js 连接 MongoDB 时(如前文提到的代码),JSON 是数据交互的核心格式。MongoDB 文档通常以 JSON 形式表示,Node.js 的 MongoDB 驱动直接操作 JSON 数据。例如:
const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017/myDatabase';
const client = new MongoClient(uri);
async function run() {
try {
await client.connect();
const db = client.db('myDatabase');
const collection = db.collection('users');
// 插入 JSON 数据
await collection.insertOne({
name: "李四",
age: 30,
hobbies: ["读书", "旅行"]
});
} finally {
await client.close();
}
}
run();
9. 总结
JSON 语法简单但严格,核心规则包括:
- 对象用
{}
,数组用[]
。 - 支持字符串、数字、布尔值、null、对象和数组六种类型。
- 键必须是双引号包裹的字符串,值需符合类型规则。
- 逗号分隔键值对或数组元素,最后一项无逗号。
- 不支持注释、函数等非标准类型。
如果你需要更复杂的 JSON 示例、解析技巧,或与 Node.js、MongoDB 的具体集成帮助,请告诉我!