首先,看一下这个简单的JSON代码片段:{

"name":"tux",
"health":"23",
"level":"4"
}

这是纯JSON,并且未针对Python或任何其他语言进行更改。 但是,如果您熟悉Python,您可能会注意到,这个示例JSON代码看起来非常像Python字典。 实际上,两者非常相似:如果您熟悉Python列表和字典,那么JSON很适合您。

以JSON格式存储数据

如果您的应用程序需要存储一些复杂的数据,则可以考虑使用JSON。 虽然您以前可能曾使用自定义文本配置文件或数据格式,但JSON为您提供了结构化的递归存储,而Python的JSON模块提供了将这些数据传入和传出应用程序所需的所有解析库。 因此,您不必自己编写解析代码,其他程序员在与应用程序进行交互时也不必解码新的数据格式。 因此,JSON易于使用且无处不在。

以下是在字典中使用字典的一些示例Python代码:#!/usr/bin/env python3

import json
# instantiate an empty dict
team = {}
# add a team member
team['tux'] = {'health': 23, 'level': 4}
team['beastie'] = {'health': 13, 'level': 6}
team['konqi'] = {'health': 18, 'level': 7}

这段代码创建了一个名为team的Python字典。 最初是空的(您可以创建一个已经填充的数据,但是如果您还没有将数据放入字典的话,那是不可能的)。

要添加到dict对象,您可以在示例代码中创建一个键(例如tux , beastie或konqi) ,然后提供一个值。 在这种情况下,该值为另一个充满玩家统计信息的词典。

字典是可变的。 您可以随意添加,删除和更新它们包含的数据。 此格式是应用程序经常使用的数据的理想存储。

以JSON格式保存数据

如果要存储在词典中的数据是需要在应用程序退出后保留的用户数据,则必须将数据写入磁盘上的文件中。 这是JSON Python模块进来的地方:with open('mydata.json', 'w') as f:

json.dump(team, f)

代码块创建一个名为mydata.json的文件,并在写入模式下将其打开。 该文件用变量f表示(一个完全任意的名称;您可以使用任何喜欢的变量名,例如file , FILE , output或几乎任何名称)。 同时,JSON模块的转储功能用于将数据从dict转储到数据文件中。

从您的应用程序中保存数据就是这么简单,而最好的部分是数据是结构化的和可预测的。 要查看,请查看生成的文件:$ cat mydata.json

{"tux": {"health": 23, "level": 4}, "beastie": {"health": 13, "level": 6}, "konqi": {"health": 18, "level": 7}}

从JSON文件读取数据

如果要将数据保存为JSON格式,则可能最终希望将数据读回到Python中。 为此,请使用Python JSON模块的json.load函数:#!/usr/bin/env python3

import json
f = open('mydata.json')
team = json.load(f)
print(team['tux'])
print(team['tux']['health'])
print(team['tux']['level'])
print(team['beastie'])
print(team['beastie']['health'])
print(team['beastie']['level'])
# when finished, close the file
f.close()

此函数或多或少地实现了保存文件的相反操作:任意变量( f )表示数据文件,然后JSON模块的load函数将数据从文件中转储到任意team变量中。

代码示例中的print语句演示了如何使用数据。 在dict键上复合dict键可能会造成混淆,但是,只要您熟悉自己的数据集,或者可以读取JSON源以获取其心智图,那么逻辑就有意义。

当然,print语句不必硬编码。 您可以使用for循环重写示例应用程序:for i in team.values():