61 lines
2.4 KiB
Python
61 lines
2.4 KiB
Python
# 第5-4课练习:JSON数据交换
|
||
#
|
||
# 本文件只提供题目、预期结果、自查清单和验收标准,不包含参考答案或代码骨架。
|
||
|
||
|
||
# 第一部分:创建并序列化Python对象
|
||
# 1. 创建一个图书字典,包含编号、书名、作者、价格、是否上架、标签和备注。
|
||
# 2. 值应覆盖字符串、数字、布尔值、列表和None。
|
||
# 3. 使用json.dumps()转换为JSON文本。
|
||
# 4. 要求中文直接显示,并使用两个空格缩进。
|
||
# 5. 输出转换后的JSON文本。
|
||
|
||
|
||
# 第二部分:反序列化请求体
|
||
# 1. 准备一段新增图书的合法JSON字符串。
|
||
# 2. 使用json.loads()转换为Python字典。
|
||
# 3. 分别输出书名、作者和价格。
|
||
# 4. 输出转换后对象的类型,确认它是dict而不是str。
|
||
|
||
|
||
# 第三部分:处理错误JSON
|
||
# 1. 依次测试属性名使用单引号、最后一项带逗号、缺少右花括号三种错误。
|
||
# 2. 捕获json.JSONDecodeError。
|
||
# 3. 为使用者输出简洁中文提示,不直接把程序终止在英文堆栈处。
|
||
# 4. 在注释中记录每段JSON为什么无效。
|
||
|
||
|
||
# 第四部分:观察HTTP中的JSON
|
||
# 1. 用多行字符串写出一份POST /books请求报文。
|
||
# 2. 请求头必须包含Content-Type: application/json; charset=utf-8。
|
||
# 3. 请求体包含title与price。
|
||
# 4. 再写出一份状态码为201的JSON响应报文。
|
||
# 5. 在注释中标出请求体、响应体与Content-Type分别位于哪里。
|
||
|
||
|
||
# 预期关键输出:
|
||
# 1. 序列化结果中的中文可以直接阅读;
|
||
# 2. JSON中的true、false和null使用小写;
|
||
# 3. 反序列化后的对象类型为dict;
|
||
# 4. 合法请求能够输出书名、作者和价格;
|
||
# 5. 三段无效JSON都得到中文错误提示。
|
||
|
||
|
||
# 自查清单:
|
||
# 1. 是否导入Python标准库json?
|
||
# 2. 是否使用json.dumps()而不是str(dict)?
|
||
# 3. JSON文本中的属性名和字符串是否使用双引号?
|
||
# 4. 是否理解True与true、None与null的区别?
|
||
# 5. 是否捕获了json.JSONDecodeError?
|
||
# 6. 是否没有直接序列化Decimal、datetime或自定义对象?
|
||
# 7. HTTP请求与响应是否正确声明Content-Type?
|
||
|
||
|
||
# 最终验收标准:
|
||
# 1. practice.py通过语法检查并可独立运行;
|
||
# 2. Python对象能够转换为格式化中文JSON;
|
||
# 3. 合法JSON能够转换为Python字典;
|
||
# 4. 三类格式错误都能安全处理;
|
||
# 5. 能解释Python对象、JSON文本和网络字节的区别;
|
||
# 6. 能指出HTTP报文中的JSON正文和Content-Type。
|