如何在Python中处理JSON文件?详细示例介绍

2021年11月16日19:41:38 发表评论 919 次浏览

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=Falsejson.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 抓取数据时。

本教程中的每个代码都包含在完整的代码页中,请查看!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: