Python如何处理JSON文件?本文带你了解如何使用内置的 json 模块在 Python 中保存(序列化)和加载(反序列化)JSON 文件。
JSON(JavaScript Object Notation)是一种轻量级的开放标准数据交换文件格式,它使用人类可读的文本来传输数据。
尽管你可能会从名称中得出结论,它是一种 Javascript 数据格式。嗯,不完全是,JSON 是一种完全独立于语言的文本格式,并使用大多数流行的编程语言(如 Python)所熟悉的约定。
如何在Python中处理JSON文件?在本教程中,你将使用 Python 执行以下操作:
- 保存 JSON 数据
- 加载 JSON 数据
幸运的是,Python 有一个内置模块json,这对我们的工作来说已经足够了,让我们开始吧!
Python处理JSON文件示例:保存 JSON 数据
Python 字典与 JSON 格式非常相似,事实上,你可以用很少的代码行保存一个字典:
import json
# example dictionary to save as JSON
data = {
"first_name": "John",
"last_name": "Doe",
"email": "john@doe.com",
"salary": 1499.9, # just to demonstrate we can use floats as well
"age": 17,
"is_real": False, # also booleans!
"titles": ["The Unknown", "Anonymous"] # also lists!
}
# save JSON file
# 1st option
with open("data1.json", "w") as f:
json.dump(data, f)
Python如何处理JSON文件?执行上述代码后,你会注意到data1.json文件出现在你的工作目录中。我们以写入模式打开文件,并使用该json.dump()
函数将 Python 字典作为 JSON 格式的流序列化到打开的文件中。
生成的文件将如下所示:
{
"first_name": "John",
"last_name": "Doe",
"email": "john@doe.com",
"salary": 1499.9,
"age": 17,
"is_real": false,
"titles": [
"The Unknown",
"Anonymous"
]
}
这是另存为 JSON 的一种方式,你也可以使用json.dumps()
函数:
# 2nd option
with open("data2.json", "w") as f:
f.write(json.dumps(data, indent=4))
该json.dumps()
函数将字典作为 JSON 解析字符串返回,你可能希望此字符串用于其他用途,我们只是将其保存到文件中只是为了让你知道它确实存在。
注意我indent=4
这次添加了一个参数作为json.dumps()
函数,这将漂亮地打印 JSON 数组元素和对象成员,如果你使用indent=0
,它只会打印新行,如果它是None
(默认),那么它会被转储到一行中(不是人类可读的)。Ť他indent
的关键字中都存在dump()
和dumps()
功能。
处理非 ASCII 字符
Python处理JSON文件示例:如果你的数据包含非 ASCII 字符,并且你不希望 JSON 文件中包含 Unicode 实例(例如\u0623
),那么你应该传递ensure_ascii=False
给json.dump()
函数:
unicode_data = {
"first_name": "أحمد",
"last_name": "علي"
}
with open("data_unicode.json", "w", encoding="utf-8") as f:
json.dump(unicode_data, f, ensure_ascii=False)
结果文件:
{"first_name": "أحمد", "last_name": "علي"}
加载 JSON 数据
Python如何处理JSON文件?反序列化 JSON 文件并将它们加载到 Python 中非常简单,以下代码加载之前保存的 JSON 文件:
# read a JSON file
# 1st option
file_name = "data1.json"
with open(file_name) as f:
data = json.load(f)
print(data)
该json.load()
函数将自动返回一个 Python 字典,这简化了我们处理 JSON 文件的工作,输出如下:
{'first_name': 'John', 'last_name': 'Doe', 'email': 'john@doe.com', 'salary': 1499.9, 'age': 17, 'is_real': False, 'titles': ['The Unknown', 'Anonymous']}
同样,你也可以使用json.loads()
函数来读取字符串:
# 2nd option
file_name = "data2.json"
with open(file_name) as f:
data = json.loads(f.read())
print(data)
所以我们首先使用read()
方法读取文件内容,然后将其传递给json.loads()
函数来解析它。
简单的真实示例
如何在Python中处理JSON文件?在本节中,我们将使用 API 请求到远程 Web 服务器,并将结果数据保存到 JSON 文件中,这是完整的Python处理JSON文件示例代码:
import requests
import json
# make API request and parse JSON automatically
data = requests.get("https://jsonplaceholder.typicode.com/users").json()
# save all data in a single JSON file
file_name = "user_data.json"
with open(file_name, "w") as f:
json.dump(data, f, indent=4)
print(file_name, "saved successfully!")
# or you can save each entry into a file
for user in data:
# iterate over `data` list
file_name = f"user_{user['id']}.json"
with open(file_name, "w") as f:
json.dump(user, f, indent=4)
print(file_name, "saved successfully!")
# load 2nd user for instance
file_name = "user_2.json"
with open(file_name) as f:
user_data = json.load(f)
print(user_data)
print("Username:", user_data["username"])
注意:要运行上述代码,你需要通过以下方式安装请求库:pip install requests
结论
Python如何处理JSON文件?现在你知道如何使用dump()
,dumps()
,load()
和loads()
功能的JSON模块,你必须使用Python JSON数据的工作能力。
作为开发人员,你可能必须经常与它进行交互,你会多次遇到 JSON,尤其是在使用我们在示例中显示的REST API时,或者当你从 Web 抓取数据时。
本教程中的每个代码都包含在完整的代码页中,请查看!