JSON
JSON(JavaScript Object Notation)
JSON(JavaScript Object Notation) 是一种轻量级、文本性的数据交换格式,便于人阅读与编写,也易于机器解析和生成。尽管起源于 JavaScript 的语法子集,JSON 已成为与语言无关的通用数据格式,广泛被各种编程语言支持。
1. 简介 —— 什么是 JSON?
JSON 用键值对(key–value)来表示结构化数据,支持嵌套对象与数组,从而能够描述复杂的数据结构。它常用于前后端交互、配置文件和轻量级数据存储。
2. JSON 的主要特点
- 可读性高:采用清晰的文本表示,结构直观。
- 易于编写:语法简单,不需要复杂标记。
- 易于解析:多数语言提供标准库或第三方库用于解析/生成。
- 轻量级:相较于 XML 等格式更为紧凑,传输效率高。
3. 基本结构
JSON 有两种顶级结构:对象(Object) 和 数组(Array)。
对象(Object)
对象由若干键值对组成,使用大括号 {} 包围,键必须是字符串(双引号),值可以是字符串、数字、布尔值、null、对象或数组。
示例:
1 | |
数组(Array)
数组由一系列值组成,使用中括号 [] 包围,元素之间用逗号分隔。数组元素类型可以混合(字符串、数字、对象等)。
示例:
1 | |
4. 语法规则要点
- 键名(Key):必须是字符串,必须用双引号
"包围。 - 值(Value):可以是:
- 字符串(双引号)
- 数字(整数或浮点数)
- 布尔值:
true/false null- 对象(嵌套
{}) - 数组(
[])
- 分隔符:对象的键值对与数组元素之间用逗号
,分隔;最后一项后不能有多余的逗号(严格 JSON 不允许尾随逗号)。 - 字符串转义:特殊字符需用反斜杠
\转义,例如:\n(换行)、\t(制表)、\"(双引号)、\\(反斜杠)等。
5. 常见用途
- 前后端数据交换:浏览器通过 AJAX / fetch 获取后端返回的 JSON 数据,然后转换为对象进行处理。
- 配置文件:许多工具和库使用 JSON 作为配置文件格式(可读、可编辑)。
- 数据存储:NoSQL 数据库(如 MongoDB)使用 JSON 风格的文档存储数据。
- 日志与接口标准:在微服务与接口设计中,JSON 常用作请求/响应的标准格式。
6. 解析与生成(示例)
不同语言通常都有内置或常用库进行 JSON 操作。
JavaScript
1
2const obj = JSON.parse(jsonString); // 将 JSON 字符串解析为对象/数组
const str = JSON.stringify(obj); // 将对象/数组转换为 JSON 字符串Python
1
2
3import json
obj = json.loads(json_string) # 解析
s = json.dumps(obj, ensure_ascii=False) # 生成(ensure_ascii=False 保持中文)Java(示例库)
1
2
3
4// 使用 Gson
Gson gson = new Gson();
MyClass obj = gson.fromJson(jsonString, MyClass.class);
String str = gson.toJson(obj);
7. 注意事项与最佳实践
- 键名唯一:同一对象中不要重复使用相同键名(行为未定义或后者覆盖前者)。
- 类型明确:注意区分字符串和数字,避免将数字写成带引号的字符串(除非确有需要)。
- 不要有尾随逗号:严格 JSON 禁止最后一项后多余逗号,例如
{ "a": 1, }是非法的。 - 字符编码:一般使用 UTF-8 编码,处理中文时注意编码一致性。
- 安全性:处理来自不可信来源的 JSON 时,注意避免注入或反序列化漏洞;不要将
eval用于解析 JSON。 - 合理的结构设计:为接口或配置设计清晰、扁平或层次分明的结构,便于维护与演进。
8. 常见错误示例(便于排查)
使用单引号代替双引号(非法):
1
{ 'name': '张三' } // 错误:键与字符串必须用双引号尾随逗号(非法):
1
{ "a": 1, } // 错误:最后不能有逗号未转义特殊字符(可能导致解析失败):
1
2{ "text": "第一行
第二行" } // 错误:换行应使用 \n 转义
9. 小结
JSON 是一种简洁、通用的数据交换格式,适合绝大多数前后端通信与轻量级数据存储场景。掌握其基本语法(字符串需双引号、无尾逗号、类型与转义)和常用解析/生成方法,可以在绝大多数开发任务中提高效率与互操作性。