是不是很多零基础的朋友一听到 “JSON 格式转换”“序列化”“反序列化” 就头大?想把 Python 里的字典转成 JSON 文件,结果要么报格式错误,要么打开文件中文全是乱码;从网上下载的 JSON 数据,想提取里面的信息,却不知道怎么转成能操作的格式;更别说搞懂 “序列化” 到底是啥意思,感觉比学英语语法还难。别着急,兔子哥刚开始接触这些概念时,光分清 “序列化” 和 “反序列化” 就花了两天,把列表直接存成 JSON 更是报错到怀疑人生。今天就用大白话来讲 JSON 格式转换,从基础概念到实用方法,零基础也能轻松学会数据序列化与反序列化!
一、先搞懂:序列化和反序列化到底是啥?为啥要学?
可能有朋友会问:“我就想转个格式,为啥要搞懂这么绕的词?” 其实这俩词看着复杂,说白了就是数据的 “打包” 和 “拆包”。
序列化就是把我们能看懂的数据(比如 Python 的字典、列表)转成计算机方便存储和传输的格式(这里就是 JSON 字符串或文件),就像把行李打包成箱子方便运输。
反序列化则是反过来,把 JSON 格式的数据(字符串或文件)转成我们能直接操作的格式(比如 Python 字典),好比把运输的箱子拆开拿出里面的东西。
为啥非要这么折腾?因为不同程序、不同语言 “说话” 的方式不一样。比如 Python 的字典只能在 Python 里用,想传给前端页面或者存到文件里,就得转成大家都认识的 JSON 格式。或许大部分主流编程语言都支持 JSON,这也是它能成为数据交换 “通用语言” 的原因吧。
二、序列化实战:把数据转成 JSON,这俩方法最常用
想把 Python 里的数据(字典、列表)转成 JSON,用对方法其实很简单,这两个工具必须学会。
- dumps ():转成 JSON 字符串,方便传输
如果你需要把数据传给别人(比如通过 API 接口发数据),就得转成 JSON 字符串。用 Python 自带的json.dumps()就行,记得加个关键参数。
示例:
python
import json# 定义一个Python字典student = {"name": "小李","age": 20,"hobby": ["打球", "看书"],"is_study": True}# 转成JSON字符串json_str = json.dumps(student, ensure_ascii=False, indent=2)print(json_str)这里的
ensure_ascii=False一定要加,不然中文会变成 “\u5c0f\u674e” 这样的乱码;indent=2能让字符串有缩进,看着更清楚。- dump ():直接存成 JSON 文件,方便保存
如果想把数据存到电脑上(比如保存配置、记录日志),用json.dump()更直接,一步到位存成文件。
示例:
python
# 存成JSON文件with open("student.json", "w", encoding="utf-8") as f:json.dump(student, f, ensure_ascii=False, indent=2)打开生成的 “student.json” 文件,里面的内容整整齐齐,中文也能正常显示,是不是很方便?
不过话说回来,不是所有数据都能转成 JSON 哦。像 Python 里的
datetime日期对象、自定义的类实例,直接转就会报错,这时候得先把它们转成字符串才行。三、反序列化实战:把 JSON 转成数据,这俩方法要记牢
拿到 JSON 格式的数据(字符串或文件),想在 Python 里操作,就得转成字典或列表,这两个方法最常用。
- loads ():解析 JSON 字符串,提取信息
从别人那收到 JSON 字符串(比如 API 接口返回的数据),用json.loads()转成 Python 字典,就能轻松提取信息了。
示例:
python
# 假设这是收到的JSON字符串json_data = '{"name": "小张", "score": 90, "subjects": ["数学", "英语"]}'# 转成Python字典data = json.loads(json_data)print(data["name"]) # 输出:小张print(data["subjects"][0]) # 输出:数学转完之后,就像操作普通字典一样方便,想拿什么信息直接用键取就行。
- load ():读取 JSON 文件,处理本地数据
如果数据存在电脑的 JSON 文件里,用json.load()直接读进来转成字典,不用先读文件内容。
示例:
python
# 读取刚才保存的student.json文件with open("student.json", "r", encoding="utf-8") as f:data = json.load(f)print(data["age"]) # 输出:20print(data["hobby"]) # 输出:['打球', '看书']四、常见问题解决:这些坑别再踩了,兔子哥试过全有效
- 中文乱码:转完 JSON 中文变成 Unicode 编码
这是最常见的问题,原因就是没加ensure_ascii=False参数。解决方法很简单,不管用dumps()还是dump(),都加上这个参数,同时写文件时指定encoding="utf-8",中文就能正常显示了。 - 格式错误:JSON 字符串报 “语法错误”
很多时候是因为键用了单引号,比如{'name': '小李'},JSON 要求键必须用双引号。解决方法:要么手动改成双引号,要么用 Python 的dumps()自动转换,它会帮你处理引号问题。 - 嵌套数据提取不到:层级太深不知道怎么取
JSON 数据经常嵌套多层,比如{"data": {"user": {"name": "小王"}}},直接用data["name"]会报错。解决方法:按层级一步步取,data["data"]["user"]["name"]才能拿到 “小王”,可以先打印数据看看结构。 - 特殊数据类型转换失败:提示 “not JSON serializable”
像datetime对象、函数这些,JSON 不认识,直接转就会报错。解决方法:先把它们转成字符串,比如str(date_obj),再进行序列化。至于更复杂的自定义类型转换,具体机制可能还需要进一步研究,新手先掌握基础类型转换就够了。
结尾心得
JSON 格式转换其实没那么难,记住 “序列化是打包(Python→JSON),反序列化是拆包(JSON→Python)” 就行。重点是把
dumps() dump() loads() load()这四个方法练熟,遇到中文乱码就加ensure_ascii=False,遇到格式错误就检查引号和逗号。新手学习时别害怕报错,报错信息其实是在告诉你哪里错了,对着改就行。多动手转几个字典、读几个 JSON 文件,练两次就能熟练掌握,以后处理数据交换和存储就会轻松很多!标签: json
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~