一文读懂:编程中的“JSON”究竟是什么意思?
在编程的世界里,我们经常会遇到各种“缩写词”,HTML、CSS、API……而“JSON”无疑是其中高频出现的一个,如果你刚接触编程,或者在开发过程中频繁看到 JSON 格式的数据,可能会好奇:编程中的 JSON 究竟是什么意思?它为什么这么重要?
别担心,这篇文章会用最通俗的方式带你彻底搞懂 JSON。
JSON 的全称:它到底是什么?
JSON 的全称是 JavaScript Object Notation,中文直译为“JavaScript 对象表示法”。
从名字就能看出,它最初是为 JavaScript 语言设计的,但如今早已不局限于 JavaScript——几乎所有主流编程语言(如 Python、Java、C++、Go 等)都支持 JSON,它本质上是一种轻量级的数据交换格式,用特定的文本格式来结构化地表示数据”。
为什么需要 JSON?——数据交换的“通用语言”
想象一个场景:你的前端网页(用 JavaScript 开发)需要从后端服务器获取数据(比如用户信息、商品列表),服务器上的数据可能存储在数据库里,格式复杂(如 Python 的字典、Java 的对象),直接传输给浏览器,浏览器根本“看不懂”。
这时,JSON 就派上用场了:它能把复杂的数据“翻译”成一种纯文本格式,这种格式既容易被计算机解析(无论是服务器还是浏览器),又容易被人类阅读,就像不同国家的人说不同语言,JSON 成了数据交换的“通用语言”,让前后端、不同系统之间的沟通变得顺畅。
JSON 的核心语法:长什么样?
JSON 的设计非常简洁,只包含 6 种基本数据结构,可以看作是“JavaScript 对象和数组的简化版”,我们通过一个例子来拆解:
{ "name": "张三", "age": 25, "isStudent": false, "courses": [ {"subject": "数学", "score": 90}, {"subject": "英语", "score": 85} ], "address": { "city": "北京", "district": "海淀区" } }
这段 JSON 数据包含了 5 个核心语法规则,也是 JSON 的“骨架”:
键值对(Key-Value Pair):数据的基本单位
JSON 的核心是“键值对”,格式是 "键": 值
。
- 键(Key):必须是字符串,且必须用双引号包裹(单引号不行!)。
"name"
、"age"
。 - 值(Value):可以是多种类型(见下文)。
键值对之间用逗号分隔,最后一个键值对后面可以不加逗号(但规范建议加,避免遗漏)。
支持的数据类型:值的“身份证”
JSON 中的“值”可以是以下 6 种类型:
- 字符串(String):用双引号包裹,如
"张三"
、"北京"
。 - 数字(Number):整数或小数,如
25
、14
(不支持八进制、十六进制,也不能加引号)。 - 布尔值(Boolean):只有
true
和false
(全小写,不是True
/False
)。 - 空值(Null):表示“空”,用
null
(全小写,不是NULL
或Null
)。 - 数组(Array):有序的数据集合,用方括号
[]
包裹,元素之间用逗号分隔,如["数学", "英语"]
,数组中的值可以是任意类型(甚至嵌套另一个对象或数组)。 - 对象(Object):无键值对的集合,用花括号 包裹,如
{"city": "北京", "district": "海淀区"}
,对象本身也可以作为值(比如上面的"address"
对应的值就是另一个对象)。
结构嵌套:复杂数据的“俄罗斯套娃”
JSON 可以像“俄罗斯套娃”一样嵌套:对象的值可以是数组,数组的元素又可以是对象,对象里还能再嵌套对象……比如上面的例子:
"courses"
是一个数组,每个元素是对象(包含"subject"
和"score"
)。"address"
是一个对象,里面又嵌套了"city"
和"district"
。
这种嵌套结构让 JSON 能灵活表示复杂的数据关系(比如用户信息、订单详情、树形结构数据等)。
格式要求:严格但“友好”
JSON 对格式的要求非常严格(毕竟是机器解析),但整体又比 XML 等格式更“友好”:
- 必须用双引号包裹键和字符串值(单引号会报错)。
- 键值对之间、数组元素之间必须用逗号分隔(最后一个可省略)。
- 不能有注释(早期 JSON 不支持注释,但很多现代解析器允许使用 或 ,但规范本身不支持)。
JSON 在编程中怎么用?——从“文本”到“数据”
JSON 本质是文本字符串(比如上面那段 JSON 代码,存起来就是一个 .json
文件,或是一段 HTTP 请求中的文本),但在编程中,我们通常需要把它转换成语言原生支持的数据结构,才能操作,这个过程叫“序列化”和“反序列化”:
序列化(Serialization):将数据转为 JSON 字符串
当我们需要把数据(如 Python 的字典、Java 的对象)发送给其他系统时,要先把它转换成 JSON 格式的字符串,这个过程就是“序列化”。
示例(Python):
import json # Python 字典 data = { "name": "张三", "age": 25, "isStudent": False } # 序列化为 JSON 字符串 json_str = json.dumps(data) print(json_str) # 输出:{"name": "张三", "age": 25, "isStudent": false}
反序列化(Deserialization):将 JSON 字符串转为数据
当我们收到 JSON 格式的数据(如 API 返回的结果),需要把它转换成编程语言原生支持的数据结构(如 Python 的字典、JavaScript 的对象),才能读取和修改,这个过程就是“反序列化”。
示例(JavaScript):
// JSON 字符串(可能是从服务器接收的) const jsonStr = '{"name": "张三", "age": 25, "isStudent": false}'; // 反序列化为 JavaScript 对象 const data = JSON.parse(jsonStr); console.log(data.name); // 输出:张三 console.log(data.age); // 输出:25
JSON 的应用场景:无处不在的“数据搬运工”
JSON 之所以成为编程领域的“宠儿”,是因为它轻量、易读、跨语言,几乎适用于所有需要数据交换的场景:
- Web 开发:前后端数据交互的默认格式(RESTful API 返回的数据基本都是 JSON)。
- 配置文件:很多工具和框架的配置文件用 JSON 格式(如
package.json
在 Node.js 项目中定义依赖)。 - 数据存储:轻量级数据库(如 MongoDB)直接存储 JSON 格式的数据(称为“BSON”,是 JSON 的二进制扩展)。
- 移动应用开发:App 和服务器之间的通信也常用 JSON 传输数据。
JSON 和 XML 的简单对比
提到数据格式,很多人会想到 XML(可扩展标记语言),JSON 和 XML 都是结构化数据格式,但 JSON 更“轻”:
| 对比项 | JSON | XML |
|------------------|-----------------------------------|----------------------------------|
| 格式复杂度 | 简洁,键值对结构,无冗余标签 | 复杂,需要闭合标签,冗余信息多 |
| 可读性 | 更易读(类似代码中的对象/字典) | 稍复杂(类似 HTML,标签多) |
| 解析速度 | 更快(文本小,解析逻辑简单) | 较慢(标签多,解析复杂) |
| 数据类型支持 | 原生支持数字、布尔、null 等 | 所有数据都需文本表示,需额外定义 |
| 注释支持 | 不支持(部分解析器允许) | 支持 |
在现代 Web 开发中,JSON 几乎完全取代了 XML,成为数据交换的主流格式。
JSON 是编程的“通用语言”
JSON 就是编程中用来“表示和交换数据”的一种文本格式,它用键值对、数组、对象的结构,把复杂的数据变成“机器能读、人能看懂”的字符串,再通过
还没有评论,来说两句吧...