# 第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。