跳到主要内容

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注意是小写
nullnull空值
数组[1, 2, 3]有序列表
对象{"key": "val"}键值对

就这些。没有函数、没有日期、没有 undefined、没有注释。简单就是力量。

字符串与对象的互相转换

JSON 处理的核心操作就两个:序列化(对象 -> 字符串)和反序列化(字符串 -> 对象)。

加载代码编辑器中……
操作PythonJavaScript
对象 -> 字符串json.dumps(obj)JSON.stringify(obj)
字符串 -> 对象json.loads(str)JSON.parse(str)

记忆技巧:Python 的函数名带 s 的(dumps、loads)处理字符串,不带 s 的(dump、load)处理文件。s = string

格式化输出(Pretty Print)

默认的 JSON 输出都挤在一行,像没有标点的作文一样难读。加上缩进就好多了:

加载代码编辑器中……
PythonJavaScript
缩进indent=2第三个参数 2
中文ensure_ascii=False默认支持
键排序sort_keys=True不直接支持
自定义第二个参数(replacer 函数)

处理嵌套 JSON

真实世界的 JSON 数据往往层层嵌套,像俄罗斯套娃一样。来看一个"真实"的例子:

加载代码编辑器中……

类型映射

Python 和 JS 的数据类型跟 JSON 类型的对应关系也有些微妙之处:

加载代码编辑器中……
Python 类型JSON 类型JS 类型
strstringstring
int, floatnumbernumber
True/Falsetrue/falsetrue/false
Nonenullnull
listarrayArray
dictobjectObject

注意:Python 的 True 是大写开头,JSON/JS 的 true 是小写。json.dumps() 会自动帮你转换,但手写 JSON 时别搞混了。

实战:简易"数据库"

用 JSON 文件当"穷人的数据库"是入门项目的经典操作:

加载代码编辑器中……
🏋️AI 练习

动手练一个"通讯录"程序:

  1. 设计一个通讯录的 JSON 数据结构(每个联系人有:姓名、电话、邮箱、分组)
  2. 写一个函数把通讯录导出为格式化的 JSON 字符串(美化输出)
  3. 写一个函数从 JSON 字符串解析回通讯录对象
  4. 实现"按分组筛选"功能:给定分组名,返回该组所有联系人

这个练习的 JSON 解析部分可以直接在上面的代码区域里运行(不涉及文件操作的部分)。

小结

概念PythonJavaScript
对象 -> 字符串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/FalseTrue / Falsetrue / false
空值Nonenull

一句话总结:JSON 就像编程世界的英语——语法简单、人人都懂、到处都用。Python 用 json 模块的四个函数(dumps/loads/dump/load),JS 用 JSON 对象的两个方法(stringify/parse),学会这几个就掌握了互联网数据交换的钥匙。