列表、字典与JSON数据
- 用列表和字典组织多条阅读记录
- 区分JSON文本与解析后的Python对象
一条记录不止一个数字
晨光书架现在希望同时保存书名与分钟数。列表适合有顺序的多条记录,字典适合一条记录里按名称保存不同字段。字典中的键像栏目名,值是该栏内容,例如title对应虚构书名,minutes对应整数。用字段名读取通常比记住第几个位置更清楚。三本书可形成一个列表,每项是一个字典。数据结构帮助组织信息,不会自动判断书名真实、分钟数合理或记录是否重复,这些仍需规则与校验。
文本格式与内存对象
对象表示法JSON是一种常见的文本数据交换格式。它能表示对象、数组、文本、数字和一些特殊值,但格式与Python代码并不完全相同。例如JSON字符串与键通常使用双引号,真假值写法也不同。文本本身只是字符,解析后才能按列表或字典方式读取。解析负责检查格式能否理解,不能证明字段语义正确。合法JSON仍可能写出负分钟或缺失字段,因此格式校验与业务校验应该分开。
只使用标准库的解析示例
import json
text = '[{"title": "纸上花园", "minutes": 12}, {"title": "云朵小路", "minutes": 8}]'
records = json.loads(text)
for record in records:
title = record["title"]
minutes = record["minutes"]
print(title, minutes)
pretty = json.dumps(records, ensure_ascii=False, indent=2)
print(pretty)- 第一行导入Python标准库json,不需要第三方软件包或密钥。
- 第二行保存一段JSON文本,外层单引号属于Python字符串,内部双引号属于JSON。
- 第三行解析文本,得到由两个字典组成的列表。
- 第四行逐条遍历记录。
- 第五行按title键读取书名。
- 第六行按minutes键读取分钟数。
- 第七行显示当前记录的两项值。
- 第八行把对象重新转成带缩进的JSON文本,并保留中文显示。
- 第九行显示重新序列化的文本,不写入磁盘。
解析与序列化的方向
解析是文本变成对象,序列化是对象变成文本。可以用两个箭头帮助记忆:字符串经过loads成为记录列表,记录列表经过dumps成为字符串。第八行设置ensure_ascii为假只是改变中文在输出文本中的表示方式,不加密资料,也不限制访问。缩进让人更容易阅读,不影响数据本身的含义。不要使用执行代码的功能去读取所谓数据,标准格式解析能让数据保持数据身份。
常见错误与读取范围
JSON少一个引号或多一个非法逗号会导致解析错误;记录没有minutes字段,按键读取会出现键错误;字段存在但值是文本十二,则需要业务校验。不同错误应该对应不同修订,不要全部归为AI没理解。实际文件读取时还要确认编码、位置与授权,只读取自己有权使用的练习文件。本例所有文本直接写在程序中,不访问文件、不上传资料。先理解数据表示与处理方向,后续才能安全地把文件内容接入小程序。
本节要点
- 列表组织多条记录,字典组织一条记录的字段
- JSON文本需解析后才能按对象方式处理
- 格式合法不等于字段含义正确
动手练习:给虚构书目新增一条记录
- 在JSON数组中增加书名星光笔记、分钟数五的记录
- 预测循环将显示的三条内容
- 说明缺字段与负分钟分别属于哪种检查问题
自查清单
- 新增记录字段与数值类型正确
- 能区分格式、结构与业务规则错误
先自己做,再查看参考答案
新增记录应保持对象字段为title和minutes,书名使用文本星光笔记,分钟数使用数字五,而不是带引号的文本五。循环预期依次显示纸上花园十二、云朵小路八、星光笔记五。JSON解析成功只说明文本格式可以转换为对象;缺少minutes字段会让后续按键读取失败,应检查数据结构;负分钟即使字段齐全、格式合法,也违反业务规则,应单独校验。loads与dumps方向相反,前者文本到对象,后者对象到文本。中文可读选项不是加密,不能因为输出好看就认为数据已经获得隐私保护或事实确认。