Python json.dumps用法介绍
介绍
Python 是一种功能强大且易于学习的编程语言,它提供了许多处理数据的内置库。其中,json
是一个重要的模块,它用于处理 JSON(JavaScript Object Notation)格式的数据。json.dumps()
是 json
模块中的一个函数,用于将 Python 对象转换成 JSON 字符串。本文将详细介绍 json.dumps
函数的用法和示例。
什么是 JSON
JSON 是一种常用的数据交换格式,它以易于理解和生成的方式来表示结构化数据。JSON 格式经常用于跨平台、跨语言的数据交互。在 Python 中,JSON 数据通常表示为字典和列表的组合。
JSON 由以下部分组成:
- 对象(Object):由键值对组成,其中的键是字符串,值可以是字符串、数字、布尔值、数组、其他对象或 null。
- 数组(Array):由值的有序列表组成,值可以是字符串、数字、布尔值、对象、数组或 null。
- 值(Value):表示字符串、数字、布尔值、对象、数组或 null。
- 字符串(String):由双引号包围的零个或多个字符组成。
- 数字(Number):表示整数或浮点数。
- 布尔值(Boolean):表示真或假。
- null:表示空值。
以下是一个简单的 JSON 示例:
{
"name": "John",
"age": 30,
"isStudent": false,
"hobbies": ["reading", "coding", "traveling"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"isEmployed": null
}
json.dumps()
函数的用法
json.dumps()
函数用于将 Python 对象转换成 JSON 字符串。它接受一个必需的参数 obj
,该参数可以是 Python 内置数据类型(如字典、列表、字符串、数字、布尔值和空值)或自定义的类对象。该函数还接受一些可选的参数,用于自定义 JSON 字符串的格式。
基本语法
下面是 json.dumps()
函数的基本语法:
json_str = json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)
obj
参数是要转换成 JSON 字符串的 Python 对象。
参数说明
以下是 json.dumps()
函数的一些常用参数的说明:
skipkeys
:如果设置为True
,则字典键中的非字符串类型将被跳过,否则会引发TypeError
。默认为False
。ensure_ascii
:如果设置为True
,则输出的 JSON 字符串中的所有非 ASCII 字符会被转义为 Unicode 转义序列,否则将按原样输出。默认为True
。check_circular
:如果设置为False
,则允许循环引用(即对象之间相互引用),否则将引发TypeError
。默认为True
。allow_nan
:如果设置为False
,则禁止使用 NaN、Infinity 和 -Infinity,否则将引发ValueError
。默认为True
。cls
:用于编码自定义对象的编码器类。默认为None
。indent
:用于缩进输出的字符串。如果设置为非负整数,则输出将格式化为具有指定缩进级别的漂亮打印的字符串。默认为None
。separators
:用于分隔项的字符串。该参数应为一个 (item_separator, key_separator) 元组。默认为(', ', ': ')
。default
:用于在对象中找不到可序列化的对象时将其转换为可序列化对象的函数。默认为None
。sort_keys
:如果设置为True
,则输出的 JSON 字符串将按键的顺序排序。默认为False
。
返回值
json.dumps()
函数返回一个表示给定 Python 对象的 JSON 字符串。
示例
以下将展示 json.dumps()
函数的一些示例,以及它们的运行结果。
示例 1:基本用法
下面是一个基本用法的示例,将一个 Python 字典对象转换为 JSON 字符串:
import json
# 创建一个 Python 字典
person = {
"name": "John",
"age": 30,
"isStudent": False,
"hobbies": ["reading", "coding", "traveling"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"isEmployed": None
}
# 将字典对象转换为 JSON 字符串
json_str = json.dumps(person)
print(json_str)
运行结果:
{"name": "John", "age": 30, "isStudent": false, "hobbies": ["reading", "coding", "traveling"], "address": {"street": "123 Main St", "city": "New York", "state": "NY"}, "isEmployed": null}
在上面的示例中,我们创建了一个包含个人信息的字典对象 person
,然后使用 json.dumps()
函数将其转换为相应的 JSON 字符串,并将其打印出来。可以看到,JSON 字符串中的键和值与原始字典对象中的键和值相对应。
示例 2:使用 indent
参数美化输出
json.dumps()
函数的 indent
参数用于缩进输出的字符串,可以使 JSON 字符串更易读。
import json
# 创建一个 Python 字典
person = {
"name": "John",
"age": 30,
"isStudent": False,
"hobbies": ["reading", "coding", "traveling"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"isEmployed": None
}
# 将字典对象转换为具有缩进的 JSON 字符串
json_str = json.dumps(person, indent=4)
print(json_str)
运行结果:
{
"name": "John",
"age": 30,
"isStudent": false,
"hobbies": [
"reading",
"coding",
"traveling"
],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"isEmployed": null
}
在上面的示例中,我们使用 json.dumps()
函数将字典对象 person
转换为具有缩进的 JSON 字符串,并将其打印出来。可以看到,JSON 字符串中的键和值已经按照指定的缩进级别进行了格式化,使其更易读。
示例 3:使用 sort_keys
参数排序键
json.dumps()
函数的 sort_keys
参数可以用于按键的顺序对 JSON 字符串进行排序。
import json
# 创建一个 Python 字典
person = {
"name": "John",
"age": 30,
"isStudent": False,
"hobbies": ["reading", "coding", "traveling"],
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY"
},
"isEmployed": None
}
# 将字典对象转换为具有排序键的 JSON 字符串
json_str = json.dumps(person, sort_keys=True)
print(json_str)
运行结果:
{"address": {"city": "New York", "state": "NY", "street": "123 Main St"}, "age": 30, "hobbies": ["reading", "coding", "traveling"], "isEmployed": null, "isStudent": false, "name": "John"}
在上面的示例中,我们使用 json.dumps()
函数将字典对象 person
转换为具有排序键的 JSON 字符串,并将其打印出来。可以看到,JSON 字符串中的键按字母顺序排列。
示例 4:处理自定义类对象
json.dumps()
函数可以处理自定义类对象,只需提供一个自定义类的编码器。
import json
# 创建一个自定义类对象
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 创建一个自定义类对象的实例
person = Person("John", 30)
# 自定义类的编码器
class PersonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Person):
return {
"name": obj.name,
"age": obj.age
}
return super().default(obj)
# 将自定义类对象转换为 JSON 字符串
json_str = json.dumps(person, cls=PersonEncoder)
print(json_str)
运行结果:
{"name": "John", "age": 30}
在上面的示例中,我们创建了一个自定义类对象 Person
,并创建了该类对象的实例 person
。然后,我们定义了类 PersonEncoder
作为自定义类 Person
的编码器,其中重写了 default
方法来控制对象的编码。最后,我们使用 json.dumps()
函数将自定义类对象转换为 JSON 字符串,并将其打印出来。可以看到,只有自定义类对象的属性被编码为 JSON 字符串。
结论
本文详细介绍了 json.dumps()
函数的用法和示例。你学到了如何使用 json.dumps()
函数将 Python 对象转换为 JSON 字符串,并了解了一些常用的参数。通过合理使用 json.dumps()
函数,你可以方便地在 Python 中处理和操作 JSON 格式的数据。