JSON 数据处理:互联网的"普通话"
JSON 是什么?
想象全世界的程序员说着不同的"语言"——Python 说字典、JS 说对象、Java 说 HashMap……大家各说各的,怎么交流?
这时候就需要一个"通用翻译"——JSON(JavaScript Object Notation)。它的语法简单到令人发指,任何语言都能轻松读写,于是它成了互联网上最流行的数据交换格式。
别被名字里的"JavaScript"骗了——JSON 虽然脱胎于 JS,但它是一个独立的格式,跟具体语言无关。就像阿拉伯数字虽然叫"阿拉伯"数字,但全世界都在用。
{
"name": "小明",
"age": 20,
"hobbies": ["编程", "打游戏", "睡觉"],
"address": {
"city": "北京",
"district": "海淀区"
},
"isStudent": true,
"gpa": null
}
JSON 的语法规则
JSON 的规则出奇地简单——只有 6 种数据类型:
| 类型 | JSON 示例 | 说明 |
|---|---|---|
| 字符串 | "hello" | 必须用双引号 |
| 数字 | 42, 3.14 | 整数或浮点数 |
| 布尔值 | true, false | 注意是小写 |
| null | null | 空值 |
| 数组 | [1, 2, 3] | 有序列表 |
| 对象 | {"key": "val"} | 键值对 |
就这些。没有函数、没有日期、没有 undefined、没有注释。简单就是力量。
字符串与对象的互相转换
JSON 处理的核心操作就两个:序列化(对象 -> 字符串)和反序列化(字符串 -> 对象)。
| 操作 | Python | JavaScript |
|---|---|---|
| 对象 -> 字符串 | json.dumps(obj) | JSON.stringify(obj) |
| 字符串 -> 对象 | json.loads(str) | JSON.parse(str) |
记忆技巧:Python 的函数名带
s的(dumps、loads)处理字符串,不带s的(dump、load)处理文件。s = string。
格式化输出(Pretty Print)
默认的 JSON 输出都挤在一行,像没有标点的作文一样难读。加上缩进就好多了:
| Python | JavaScript | |
|---|---|---|
| 缩进 | indent=2 | 第三个参数 2 |
| 中文 | ensure_ascii=False | 默认支持 |
| 键排序 | sort_keys=True | 不直接支持 |
| 自定义 | 无 | 第二个参数(replacer 函数) |
处理嵌套 JSON
真实世界的 JSON 数据往往层层嵌套,像俄罗斯套娃一样。来看一个"真实"的例子:
类型映射
Python 和 JS 的数据类型跟 JSON 类型的对应关系也有些微妙之处:
| Python 类型 | JSON 类型 | JS 类型 |
|---|---|---|
str | string | string |
int, float | number | number |
True/False | true/false | true/false |
None | null | null |
list | array | Array |
dict | object | Object |
注意:Python 的
True是大写开头,JSON/JS 的true是小写。json.dumps()会自动帮你转换,但手写 JSON 时别搞混了。
实战:简易"数据库"
用 JSON 文件当"穷人的数据库"是入门项目的经典操作:
动手练一个"通讯录"程序:
- 设计一个通讯录的 JSON 数据结构(每个联系人有:姓名、电话、邮箱、分组)
- 写一个函数把通讯录导出为格式化的 JSON 字符串(美化输出)
- 写一个函数从 JSON 字符串解析回通讯录对象
- 实现"按分组筛选"功能:给定分组名,返回该组所有联系人
这个练习的 JSON 解析部分可以直接在上面的代码区域里运行(不涉及文件操作的部分)。
小结
| 概念 | Python | JavaScript |
|---|---|---|
| 对象 -> 字符串 | json.dumps(obj) | JSON.stringify(obj) |
| 字符串 -> 对象 | json.loads(str) | JSON.parse(str) |
| 美化输出 | indent=2 | 第三个参数 2 |
| 中文处理 | ensure_ascii=False | 默认支持 |
| 文件读取 | json.load(f) | JSON.parse(fs.readFileSync(f)) |
| 文件写入 | json.dump(obj, f) | fs.writeFileSync(f, JSON.stringify(obj)) |
| True/False | True / False | true / false |
| 空值 | None | null |
一句话总结:JSON 就像编程世界的英语——语法简单、人人都懂、到处都用。Python 用 json 模块的四个函数(dumps/loads/dump/load),JS 用 JSON 对象的两个方法(stringify/parse),学会这几个就掌握了互联网数据交换的钥匙。