零基础学 JSON 的朋友是不是都有这样的困惑?看到 {"name":"小明","age":18} 这种格式一脸懵,分不清它和 Python 字典有啥区别;想把 Python 数据存成 JSON 文件,结果报一堆格式错误;解析 JSON 数据时,要么取不出值,要么把列表当成对象来用。别着急,兔子哥刚开始学 JSON 时,光是搞懂双引号和单引号的区别就花了半天,把 Python 字典直接存成 JSON 文件更是报错到怀疑人生。今天就带零基础的朋友从语法格式到 Python 解析实战,一步步入门 JSON,新手跟着学,轻松搞定数据存储和解析!
一、先搞懂:JSON 到底是啥?为啥非要学它?
可能有朋友会问:“我学 Python 够用了,为啥还要学 JSON?” 这你就不知道了,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,不管是前后端交互、API 接口数据传输,还是配置文件存储,几乎都离不开它。
简单说,JSON 就像一种 “通用语言”,不同编程语言(Python、Java、JavaScript 等)都能看懂它。比如你用 Python 爬取的数据,想传给前端 JavaScript 展示,用 JSON 格式最方便;你写的程序需要保存配置信息,JSON 文件比纯文本更清晰、更好读。
咱们日常开发中,处理 API 返回数据、保存用户信息、配置程序参数,这些场景都得用到 JSON,学会它,数据处理能力能直接提升一个档次。
| 数据格式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| JSON | 轻量、易读、跨语言支持好 | 不支持注释(新版支持) | API 数据、配置文件 |
| XML | 支持注释、结构严谨 | 冗余代码多、解析复杂 | 传统企业级应用 |
| Python 字典 | Python 原生支持 | 不能直接跨语言传输 | 仅 Python 内部使用 |
二、JSON 语法格式详解:3 个核心规则,5 种数据类型
JSON 语法看着简单,但新手很容易踩格式坑,这几个核心规则和数据类型必须记牢。
- 核心语法规则:这 3 点错了就会报错
- 键值对用
"键": "值"表示,键必须用双引号包裹(单引号不行),比如"name": "小明"正确,'name': "小明"或name: "小明"都会报错。 - 多个键值对之间用逗号分隔,但最后一个键值对后面不能加逗号( trailing comma),比如
{"a":1, "b":2}正确,{"a":1, "b":2,}会报错。 - 整体用大括号
{}表示对象,用中括号[]表示数组,嵌套时要注意层级关系,比如{"user": {"name": "小明", "hobby": ["篮球", "游戏"]}}是正确的嵌套结构。
- 5 种常用数据类型:JSON 能存这些数据
- 字符串:必须用双引号包裹,比如
"name": "小红",不能用单引号或不加引号。 - 数字:整数或浮点数,比如
"age": 18{"score": 95.5},不用加引号。 - 布尔值:只有
true和false(小写),比如"is_student": true,注意不能大写(True/False 是 Python 的写法)。 - 数组:用中括号包裹的有序列表,元素可以是任意数据类型,比如
"hobby": ["跑步", "读书"]{"scores": [90, 85, 95]}。 - 对象:用大括号包裹的键值对集合,可以嵌套,比如
"user": {"name": "小李", "age": 20}。
兔子哥提醒:JSON 里没有 Python 的
None,对应的是null(小写);也没有日期类型,日期通常存成字符串,比如"birthday": "2005-01-01"。三、Python 解析 JSON 实战:4 个核心方法,读写数据全搞定
Python 自带
json模块,不用额外安装,这 4 个方法学会了,JSON 读写解析全不愁。- dumps ():把 Python 数据转成 JSON 字符串
当你需要把 Python 字典或列表传给前端,或存成 JSON 格式的字符串时,用dumps()。
示例:
python
import json# Python字典user = {"name": "小明","age": 18,"is_student": True,"hobby": ["篮球", "游戏"]}# 转成JSON字符串json_str = json.dumps(user, ensure_ascii=False, indent=2)print(json_str)输出结果:
json
{"name": "小明","age": 18,"is_student": true,"hobby": ["篮球","游戏"]}关键点:
ensure_ascii=False确保中文正常显示(不然会变成 Unicode 编码);indent=2让输出有缩进,更易读。- dump ():把 Python 数据直接写入 JSON 文件
想把数据保存成 JSON 文件,用dump()更方便,不用先转字符串再写文件。
示例:
python
# 写入JSON文件with open("user.json", "w", encoding="utf-8") as f:json.dump(user, f, ensure_ascii=False, indent=2)运行后会生成
user.json文件,内容和上面的 JSON 字符串一样,是不是很简单?- loads ():把 JSON 字符串转成 Python 数据
从 API 接口拿到 JSON 格式的字符串,想用 Python 处理,用loads()转成字典或列表。
示例:
python
# JSON字符串json_str = '{"name": "小红", "age": 19, "hobby": ["画画", "唱歌"]}'# 转成Python字典user_dict = json.loads(json_str)print(user_dict["name"]) # 输出:小红print(user_dict["hobby"][0]) # 输出:画画- load ():直接读取 JSON 文件并转成 Python 数据
读取 JSON 文件里的数据,用load()一步到位,不用先读文件再转数据。
示例:
python
# 读取JSON文件with open("user.json", "r", encoding="utf-8") as f:user_data = json.load(f)print(user_data["age"]) # 输出:18(前面保存的小明的年龄)四、新手常踩的 5 个坑及解决方法,照着改少走弯路
- 用单引号或不加引号包裹键,导致格式错误
错误写法:{'name': '小明'}或{name: "小明"}
解决方法:键必须用双引号,正确写法:{"name": "小明"}。兔子哥第一次写 JSON 就用了单引号,报错半天没找到原因。 - 最后一个键值对加逗号,JSON 解析失败
错误写法:{"a": 1, "b": 2,}
解决方法:去掉末尾逗号,正确写法:{"a": 1, "b": 2}。很多新手习惯了 Python 的语法,顺手加逗号,JSON 可不认哦。 - 中文显示成 Unicode 编码(如 \u5c0f\u660e)
原因:dumps()或dump()时没加ensure_ascii=False
解决方法:加上参数,json.dumps(data, ensure_ascii=False),中文就能正常显示了。 - 混淆 Python 和 JSON 的布尔值 / 空值
错误写法:JSON 里用TrueFalseNone
解决方法:JSON 里必须用truefalsenull(全小写),Python 转 JSON 时会自动转换,但手动写 JSON 要注意。 - 解析嵌套 JSON 时取错层级
比如 JSON 数据是{"user": {"name": "小明", "age": 18}},直接用data["name"]会报错。
解决方法:按层级取,data["user"]["name"]才能拿到 “小明”,可以先打印数据结构,确认层级关系。
五、自问自答:JSON 新手常问的 3 个问题
- “JSON 里能写注释吗?我想加说明怎么办?”
老版 JSON 不支持注释,但 JSON5(JSON 的扩展)支持。如果用标准 JSON,建议把注释写在单独的文档里,或在不影响解析的地方加个 “_comment” 键,比如{"_comment": "这是用户信息", "name": "小明"}。 - “Python 字典和 JSON 长得差不多,为啥还要转来转去?”
因为字典是 Python 独有的数据类型,离开 Python 环境就不认识了;而 JSON 是通用格式,其他语言都能解析。比如你用 Python 生成的字典,想传给 JavaScript 用,必须转成 JSON 字符串才行。 - “处理大 JSON 文件时内存不够,怎么办?”
如果 JSON 文件很大(比如几 GB),用load()一次性读入会占满内存。可以用ijson这类第三方库,按流的方式逐步解析,按需读取数据,不会占用太多内存。
结尾见解
JSON 入门不难,难在注意格式细节和熟练使用 Python 的
json模块。新手学习时,别光看教程,一定要多动手写 JSON、转数据、读文件,写错了别怕,看看报错信息,对照语法规则改,很快就能掌握。兔子哥的经验是,把常用的dumps() dump() loads() load()方法写成代码模板,用到时直接套,效率超高。记住,JSON 是数据处理的 “基本功”,学会它,不管是做爬虫、开发 API 还是写配置文件,都能轻松应对!版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
评论列表
零基础学JSON,易学语法详解Python实战