JSON 代表 JavaScript 对象表示法。这种格式是一种流行的以键值对形式存储数据的方法,以便以后可以轻松解析。不过,不要被这个名称所迷惑:您可以在 Python 中使用 JSON,而不仅仅是 JavaScript,作为一种存储数据的简单方法,本文演示了如何入门。
首先,看看这个简单的 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 模块的 dump 函数用于将数据从 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():
print(i)
使用 JSON
正如您所看到的,JSON 与 Python 结合得非常好,因此当您的数据适合其模型时,它是一种很棒的格式。JSON 灵活且易于使用,并且学习一种基本上意味着您正在学习另一种,因此下次您在处理 Python 应用程序时,请考虑将其用于数据存储。
1 条评论