Python爬虫基础讲解(十):数据持久化——json
目的:将Python对象编码为JSON字符串,并将JSON字符串解码为Python对象。
json模块提供了API,将内存中的Python对象转换为」JSON序列。JSON具有以多种语言(尤其是JavaScript)实现的优点。它在RESTAPI中 Web服务端和客户端之间的通信被广泛应用,同时对于应用程序间通信需求也很有用。下面演示如何将一个Python数据结构转换为JSON:
关注微信公众号,每天都有免费的Python项目案例教学讲解
1. 编码和解码
Python 的默认原生类型(str, int,float,list,tuple和dict)。
import json data = { 'name ' : 'ACME', ' shares ' : 100, 'price ' : 542.23 } json_str = json.dumps(data) print(json_str)
表面上看,类似于Python repr()的输出。虽然内容看似是一样,但是类型却已经发生改变
print(type(json_str))
从无序的字典到有序的字符串,这个过程被称之为序列化。
最终我们将json保存到文件
with open('data.json ',mode='w',encoding='utf-8') as f: f.write(json_str)
1.1 中文字符串问题
import json data = { 'name ' : '青灯', 'shares': 100, 'price' : 542.23 } #将字典序列化为json json_str = json.dumps(data) # 写入json数据 with open( ' data.json',mode='w', encoding='utf-8 ' ) as f: f.write(json_str) # filename:data.json { "name": "\u9752\u706f","shares" : 100,"price": 542.23}
解决办法: json_str = json. dumps(data,ensure_ascii=False)
2. 读取数字
将json数据变为字典类型的这个过程被称之为反序列化
#读取json数据 with open( ' data.json ', 'r', encoding='utf-8') as f: #反序列化 data = json.1oad(f) #打印数据 print(data) print(data[ 'name '])
3. 格式化输出
JSON的结果是更易于阅读的。dumps()函数接受几个参数以使输出更易读结果。
import json data = {'a ' : 'A','b' : (2,4),'c' : 3.0} print( 'DATA: ', repr(data)) # DATA: { 'a' : 'A', 'b ': (2,4),'c': 3.0} unsorted = json.dumps(data) print( '7SON: ', json.dumps(data)) #JSON: {"a": "A","b":[2,4],"c": 3.03}
编码,然后重新解码可能不会给出完全相同类型的对象。
特别是,元组成为了列表。
JSON跟Python中的字典其实是一样一样的,事实上JSON的数据类型和Python的数据类型是很容易找到对应关系的,如下面两张表所示。
标签:
Python爬虫零基础入门
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)