高级 Python 开发课程
第 章
>
第 级
序列化模块
JSON 模块
目标
去服务站,并使用 JSON 模块来格式化文件,以确保数据正确存储。
在新建区域附属建筑的南侧有一个服务站,整个区域将被重新开发用于种植农作物。该站点有各种终端在处理新开发的数据,我们可以手动编写数据,但那会耗费大量时间。为了处理数据,我们可以使用 JSON(JavaScript 对象表示法),这是一种独立于编程语言的数据格式,以易读的方式存储信息,便于数据存储和传输。
为了在 Python 中使用 JSON,我们可以使用 import json 来访问 JSON 功能;在本关中,我们将使用以下函数:
json.loads(): 将 JSON 字符串转换为 Python 数据,接收一个参数,即你希望解析为 Python 的字符串。json.dumps(): 将 Python 数据转换为 JSON 字符串对象,此函数最多可接受四(4)个参数,只有第一个是必需的。它们分别是:- 要转换为 JSON 的 Python 数据:可以是字典(dictionaries)、列表(lists)、元组(tuples)、字符串(string)、整数(integer)、浮点数(float)、布尔值(boolean)或 None 类型。
indent: 要在数据点开头添加的空格数。separators: 希望出现在各数据点之间和/或末尾的分隔符。sort_keys: 如果转换的是字典,则按字母顺序对字典的键进行排序。
首先,前往左侧哨站的金色 X 标记处,面向带有备忘录的办公桌。使用 read() 函数验证确认终端状态所需的信息,并将其记录下来。然后走到终端前的淡色 X 标记处,有一个名为 transmission 的常量,使用 json.dumps() 将其格式化为 JSON,以便我们可以进行转换,如下所示:transmission = json.dumps(transmission)。
创建一个名为 load 的字典,并将 json.loads() 的返回值存入其中,参数是 transmission 常量。这样可以将 JSON 转换为 Python,便于访问信息。然后使用 speak() 函数和备忘录中列出的键,结合刚创建的 load 字典来输出信息。例如:player.speak(load["system"]),对所有键都这样操作。
在检查完终端的信息后,走向车站,进入车站并前往绿地毯上方的淡色 X 标记处。使用 read() 函数查看备忘录,记录其中的数值。在编辑器中有一个预写好的名为 profile 的字典,将缺失的值填入备忘录中的信息。
走到绿地毯上方的深色 X 标记处,面向终端,创建一个名为 transfer 的变量,并将 json.dumps() 的返回值存入其中,唯一参数为 profile 字典。这样即可将字典转换为 JSON 字符串对象。使用预写好的 display() 函数,将 transfer JSON 添加进去,以在终端存储数据。
前往红地毯上方的深色 X 标记处,使用 read() 函数验证终端中已输入的数据。该数据未以正确格式呈现,为了正确存储信息,需要将其存储并格式化为 JSON。数据存储在名为 red_data 的字典常量中,创建一个名为 red_storage 的变量,将 json.dumps() 的返回值存入其中。
为了格式化数据,需要向函数添加以下参数:添加 red_data 以将常量转换为 JSON,添加 indent 并设置为 5 以格式化文本,添加 separators 并设置为 ("- ", " = ") 以在每行末尾添加这些符号。语句应如下所示:red_storage = json.dumps(red_data, indent=5, separators=("- ", " = "))。使用预写好的 display(),并传入 red_storage JSON 字符串以存储和显示格式化后的数据。
前往蓝地毯上方的深色 X 标记处,面向终端,使用 read() 函数。和之前一样,数据未正确存储,需要进行格式化并排序。数据存储在名为 blue_data 的常量中,创建一个名为 blue_storage 的变量,并将 json.dumps() 的返回值存入其中。
参数设置如下:添加 blue_data 以将常量转换为 JSON,添加 indent 并设置为 4 以格式化文本,添加 separators 并设置为 (".0", " = ") 以在每行末尾添加这些符号。此外,还需将 sort_keys 作为最后一个参数并设置为 True,如下所示:sort_keys=True。使用预写好的 display(),并传入 blue_storage JSON 字符串以存储和显示排序后的数据,即可完成本关。