如何在 Python 中将字典保存为 JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它以文本形式表示数据,易于阅读和编写,同时也易于解析和生成。在 Python 中,我们可以使用 json 模块将字典保存为 JSON 格式,以便于在不同的应用程序之间进行数据交换。

本文将介绍如何在 Python 中将字典保存为 JSON,包括如何使用 json.dump() 和 json.dumps() 函数,以及如何处理一些常见的注意事项。同时,我们还将提供一些实例来帮助读者更好地理解。

一、使用 json.dump() 函数

json.dump() 函数可以将 Python 对象转换为 JSON 格式并写入文件中。它接受两个参数:要写入的 Python 对象和文件对象。下面是一个简单的例子:

import json

data = {
    "name": "Tom",
    "age": 18,
    "gender": "male"
}

with open("data.json", "w") as f:
    json.dump(data, f)

在这个例子中,我们定义了一个字典 data,它包含了一个人的姓名、年龄和性别。然后我们使用 with 语句打开一个名为 data.json 的文件,并将 data 写入该文件中。注意,我们需要将文件模式设置为 “w”,即可写模式。

运行上述代码后,我们可以在当前目录下找到一个名为 data.json 的文件。如果我们打开该文件,可以看到它的内容如下:

{"name": "Tom", "age": 18, "gender": "male"}

这就是我们刚刚保存的 JSON 格式的数据。

二、使用 json.dumps() 函数

json.dumps() 函数可以将 Python 对象转换为 JSON 格式并返回一个字符串。它接受一个参数:要转换的 Python 对象。下面是一个简单的例子:

import json

data = {
    "name": "Tom",
    "age": 18,
    "gender": "male"
}

json_str = json.dumps(data)

print(json_str)

在这个例子中,我们定义了一个字典 data,它包含了一个人的姓名、年龄和性别。然后我们使用 json.dumps() 函数将 data 转换为 JSON 格式的字符串,并将它打印出来。

运行上述代码后,我们可以看到控制台输出了一个 JSON 格式的字符串:

{"name": "Tom", "age": 18, "gender": "male"}

这就是我们刚刚转换出来的 JSON 格式的数据。

三、注意事项

在将字典保存为 JSON 格式时,我们需要注意以下几点:

  1. JSON 格式只支持字符串、数字、布尔值、列表和字典等数据类型,不支持 Python 中的一些特殊类型,如 datetime、set 等。如果我们需要保存这些特殊类型的数据,需要先将它们转换为 JSON 支持的数据类型。
  2. JSON 格式中的键名必须为字符串类型,如果我们在字典中使用了其他类型的键名,json.dump() 和 json.dumps() 函数将会抛出 TypeError 异常。例如,以下代码将会抛出异常:
import json

data = {
    1: "Tom",
    2: 18,
    3: "male"
}

json_str = json.dumps(data)

如果我们需要在 JSON 中使用数字作为键名,可以将数字转换为字符串类型。

  1. JSON 格式中的字符串必须使用双引号,不能使用单引号。如果我们在字典中使用了单引号作为字符串的引号,json.dump() 和 json.dumps() 函数将会抛出 JSONDecodeError 异常。例如,以下代码将会抛出异常:
import json

data = {
    "name": 'Tom',
    "age": 18,
    "gender": "male"
}

json_str = json.dumps(data)

如果我们需要在 JSON 中使用单引号作为字符串的引号,可以将字符串转义为双引号。

  1. 如果我们在使用 json.dump() 函数时,指定了 ensure_ascii=False 参数,那么在保存 JSON 文件时,会将非 ASCII 字符转换为 Unicode 编码,而不是将其转换为 ASCII 码。例如,以下代码将会将中文字符保存为 Unicode 编码:
import json

data = {
    "name": "张三",
    "age": 18,
    "gender": "男"
}

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)

在保存的 data.json 文件中,我们可以看到以下内容:

{"name": "\u5f20\u4e09", "age": 18, "gender": "\u7537"}

如果我们需要将非 ASCII 字符转换为对应的 ASCII 码,可以将 ensure_ascii 参数设置为 True。

四、实例说明

下面是一些实例,帮助读者更好地理解如何在 Python 中将字典保存为 JSON。

  1. 保存一个包含列表的字典
import json

data = {
    "name": "Tom",
    "age": 18,
    "gender": "male",
    "hobbies": ["reading", "swimming", "music"]
}

with open("data.json", "w") as f:
    json.dump(data, f)

在保存的 data.json 文件中,我们可以看到以下内容:

{"name": "Tom", "age": 18, "gender": "male", "hobbies": ["reading", "swimming", "music"]}
  1. 保存一个包含特殊类型的字典
import json
import datetime

data = {
    "name": "Tom",
    "age": 18,
    "gender": "male",
    "birthday": datetime.date(2000, 1, 1)
}

def default(obj):
    if isinstance(obj, datetime.date):
        return obj.strftime('%Y-%m-%d')
    raise TypeError(f'{obj} is not JSON serializable')

with open("data.json", "w") as f:
    json.dump(data, f, default=default)

在这个例子中,我们在字典中包含了一个 datetime.date 类型的数据,它表示一个人的生日。由于 JSON 格式不支持 datetime.date 类型,我们需要定义一个 default 函数,将其转换为字符串类型。在使用 json.dump() 函数时,我们将 default 函数作为参数传入。

在保存的 data.json 文件中,我们可以看到以下内容:

{"name": "Tom", "age": 18, "gender": "male", "birthday": "2000-01-01"}
  1. 保存一个包含数字键名的字典
import json

data = {
    "1": "Tom",
    "2": 18,
    "3": "male"
}

with open("data.json", "w") as f:
    json.dump(data, f)

在保存的 data.json 文件中,我们可以看到以下内容:

{"1": "Tom", "2": 18, "3": "male"}
  1. 保存一个包含单引号的字典
import json

data = {
    "name": "Tom",
    "age": 18,
    "gender": "male",
    "quote": "I'm a good boy"
}

json_str = json.dumps(data).replace("'", "\'")

with open("data.json", "w") as f:
    f.write(json_str)

在这个例子中,我们在字典中包含了一个包含单引号的字符串。由于 JSON 格式不支持单引号作为字符串的引号,我们需要将单引号转义为双引号。在使用 json.dumps() 函数时,我们将得到一个 JSON 格式的字符串,然后使用 replace() 函数将单引号替换为转义后的单引号。最后,我们将字符串写入 data.json 文件中。

在保存的 data.json 文件中,我们可以看到以下内容:

{"name": "Tom", "age": 18, "gender": "male", "quote": "I\'m a good boy"}

五、总结

本文介绍了如何在 Python 中将字典保存为 JSON 格式,包括使用 json.dump() 和 json.dumps() 函数,以及处理一些常见的注意事项。通过本文的学习,读者可以更好地理解 JSON 格式,并掌握在 Python 中使用 JSON 的方法。同时,读者也可以根据本文提供的实例,将其应用到自己的项目中,实现更灵活的数据交换。