JSON 语法(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在现代编程领域,数据交换与存储是开发过程中不可或缺的环节。无论是构建 Web 应用、移动应用,还是处理 API 交互,一种轻量级、易于解析的数据格式至关重要。JSON 语法(JavaScript Object Notation)凭借其简洁性与跨语言兼容性,已成为开发者最常用的工具之一。
本文将从零开始,逐步解析 JSON 的核心语法、数据类型、嵌套结构,以及常见应用场景。通过实际案例与代码示例,帮助编程初学者快速掌握 JSON 的基本逻辑,同时为中级开发者提供进阶技巧与注意事项。
JSON 的基本结构与语法规范
1. JSON 的基础组成
JSON 的核心结构由两个主要元素构成:对象(Object) 和 数组(Array)。
- 对象:用大括号
{}
包裹,由键值对(Key-Value Pair)组成,键和值通过冒号:
分隔,多个键值对用逗号,
分隔。 - 数组:用方括号
[]
包裹,由值(Value)组成,多个值用逗号分隔。
示例:用户数据对象
{
"name": "Alice",
"age": 28,
"is_student": false,
"hobbies": ["reading", "coding", "traveling"]
}
name
是字符串类型,age
是数字类型,is_student
是布尔类型,hobbies
是数组类型。
2. 键值对的命名规则
- 键(Key) 必须用双引号
"
括起,且不能包含特殊字符(如空格、逗号)。 - 值(Value) 可以是字符串、数字、布尔值、数组、对象,或
null
。
常见错误示例
// 错误:键未用双引号包裹
{ name: "Bob" }
// 正确写法
{ "name": "Bob" }
JSON 的数据类型与格式化规则
1. 六种基本数据类型
JSON 支持以下六种数据类型:
类型 | 描述 | 示例值 |
---|---|---|
字符串 | 用双引号包裹的文本,支持 Unicode 字符。 | "Hello, World!" |
数字 | 整数或浮点数,不支持前导零或逗号分隔(如 0123 是非法的)。 | 42 , 3.14 |
布尔值 | 表示真或假,值为 true 或 false (全小写)。 | true , false |
数组 | 有序的值集合,用方括号包裹。 | [1, 2, 3] |
对象 | 键值对的无序集合,用大括号包裹。 | {"a": 1, "b": 2} |
null | 表示空值或缺失数据,不带引号。 | null |
2. 特殊字符的转义
JSON 对以下字符需要转义,避免语法冲突:
- 双引号
"
→\"
- 反斜杠
\
→\\
- 回车
\r
→\r
- 换行
\n
→\n
示例:包含换行的字符串
{
"message": "第一行\n第二行"
}
JSON 的嵌套与复杂结构
1. 对象嵌套对象
通过嵌套对象,可以表示更复杂的层级关系。例如,描述一个家庭成员的结构:
{
"family": {
"father": {
"name": "John",
"age": 45
},
"mother": {
"name": "Emma",
"age": 42
},
"children": [
{"name": "Lucas", "age": 8},
{"name": "Sophia", "age": 5}
]
}
}
2. 数组嵌套对象与数组
数组可以包含对象或嵌套数组,例如表示课程表的结构:
{
"schedule": [
{
"day": "Monday",
"classes": [
{"subject": "Math", "teacher": "Mr. Smith"},
{"subject": "History", "teacher": "Ms. Lee"}
]
},
{
"day": "Tuesday",
"classes": [
{"subject": "Science", "teacher": "Dr. Brown"}
]
}
]
}
JSON 的解析与生成实践
1. 解析 JSON 到编程语言对象
不同编程语言提供了原生或第三方库来解析 JSON。例如在 JavaScript 中:
const jsonString = `{
"title": "JavaScript Guide",
"pages": 500
}`;
const book = JSON.parse(jsonString);
console.log(book.title); // 输出:"JavaScript Guide"
2. 生成 JSON 字符串
通过编程语言的序列化功能,可以将对象转换为 JSON 格式。例如在 Python 中:
import json
data = {
"name": "Python",
"version": 3.9,
"is_popular": True
}
json_str = json.dumps(data, indent=2)
print(json_str)
// 输出:
// {
// "name": "Python",
// "version": 3.9,
// "is_popular": true
// }
JSON 的实际应用场景与案例
1. Web API 数据交互
许多 RESTful API 返回 JSON 格式的数据。例如,请求用户信息的响应可能如下:
{
"status": 200,
"data": {
"user_id": 1001,
"profile": {
"email": "user@example.com",
"followers": 1500
}
}
}
2. 配置文件存储
JSON 常用于轻量级配置文件,例如前端框架的配置:
{
"port": 3000,
"environment": "development",
"plugins": ["babel", "eslint"],
"logging": {
"level": "debug",
"output": "console"
}
}
3. 数据持久化
在移动端或桌面应用中,JSON 可用于存储用户偏好设置:
{
"theme": "dark",
"notifications": {
"email": true,
"push": false
},
"recent_searches": ["json", "api", "javascript"]
}
常见错误与最佳实践
1. 避免的陷阱
- 未闭合的括号:漏写
}
或]
导致语法错误。 - 非法键名:键未用双引号包裹或包含特殊字符。
- 类型不匹配:例如将字符串
"123"
当作数字使用。
2. 代码规范建议
- 使用缩进与换行提升可读性(如
indent=2
)。 - 对于复杂结构,采用工具(如 JSONLint)验证语法。
- 在注释需求高的场景,考虑使用 JSON5(支持注释的扩展格式)。
结论
JSON 语法凭借其简洁性与跨平台特性,成为现代软件开发中的“通用语言”。从基础的键值对到复杂的嵌套结构,掌握 JSON 的核心规则能够显著提升数据处理与 API 开发的效率。无论是初学者构建第一个项目,还是中级开发者优化现有架构,理解 JSON 的逻辑与最佳实践都是迈向专业开发的关键一步。
通过本文的讲解与案例,读者可以快速将 JSON 应用于实际场景,例如配置文件管理、API 数据交互,以及跨语言数据共享。记住,实践是掌握 JSON 语法的最佳途径——尝试用 JSON 表达你熟悉的对象模型,逐步构建更复杂的结构。