【Python】json.dumps()函数详解和示例

前言

在Python编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json模块提供了处理JSON数据的功能,其中json.dumps()函数是这一模块中非常关键的一个函数,它用于将Python对象编码成JSON格式的字符串,它可以很方便地将 Python 数据结构转换为 JSON 格式。无论是数据持久化、网络传输还是配置文件的生成,json.dumps()都扮演着重要角色。

函数与案例详解

函数原型

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, **kw)

参数说明:
obj: 要编码的Python对象(如字典、列表等)。
skipkeys: 默认为False。如果字典的键不是基本类型(str, int, float, bool, None),且skipkeys为True,则这些键会被跳过;如果为False,则引发TypeError。
ensure_ascii: 默认为True。如果确保输出为ASCII,则非ASCII字符将被转义。如果为False,则非ASCII字符会以\uXXXX的形式输出。
check_circular: 默认为True。检测容器类型中的循环引用,并引发ValueError以避免无限递归。
allow_nan: 默认为True。如果为True,则允许将NaN、Infinity、-Infinity编码为它们的JSON等价物。如果为False,则引发ValueError。
indent: 用于美化输出的缩进量(整数)。如果为None(默认值),则输出是紧凑的;如果为正值,则每个级别将缩进这么多空格。
separators: 默认为(', ', ': '),用于指定元素之间和键值对之间的分隔符。
default: 一个函数,用于将不可序列化为JSON的对象转换为一个可序列化的对象。
sort_keys: 默认为False。如果为True,则字典的输出将按键排序。

示例1

import json

# 示例字典
data = {
    'name': 'John Doe',
    'age': 30,
    'is_student': False,
    'courses': ['Math', 'Science'],
    'null_value': None
}

# 转换为JSON字符串,不使用缩进
json_str = json.dumps(data)
print(json_str)

# 转换为JSON字符串,使用缩进和确保非ASCII字符不转义
json_pretty = json.dumps(data, indent=4, ensure_ascii=False)
print(json_pretty)

# 自定义分隔符
json_custom_sep = json.dumps(data, separators=(',', ':'))
print(json_custom_sep)

# 转换包含特殊值(如NaN)的字典(需要allow_nan=True)
data_with_nan = {'value': float('nan')}
try:
    json_with_nan = json.dumps(data_with_nan, allow_nan=True)
    print(json_with_nan)
except ValueError as e:
    print(e)

在这里插入图片描述

示例2

import json

# 创建一个 Python 字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 使用 json.dumps() 将字典转换为 JSON 格式的字符串
json_string = json.dumps(my_dict)

print(json_string)

输出:

{"name": "Alice", "age": 30, "city": "New York"}

示例3

import json

# 创建一个 Python 字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}

# 使用 json.dumps() 将字典转换为 JSON 格式的字符串
json_string = json.dumps(my_dict)

print(json_string)

json_string = json.dumps(my_dict, indent=4, sort_keys=True)
print(json_string)

输出:

{"name": "Alice", "age": 30, "city": "New York"}
{
    "age": 30,
    "city": "New York",
    "name": "Alice"
}

函数对比

json.dumps()与json.dump()的主要区别在于它们的输出目标。json.dumps()将Python对象转换为JSON格式的字符串,而json.dump()则是将Python对象直接编码到文件或类文件对象中。简而言之,dumps()返回字符串,而dump()写入文件。

总结

json.dumps()是Python中处理JSON数据的重要函数,它允许开发者将Python对象转换为JSON格式的字符串。通过调整函数的参数,可以灵活地控制输出的格式,包括缩进、非ASCII字符的处理、特殊值的处理等。了解并熟练掌握json.dumps()函数对于进行数据交换、配置管理以及网络通信等任务至关重要。

### Python `.dump` 函数使用教程 #### 功能概述 `.dump()` 函数存在于多个库中,用于将 Python 对象序列化为特定格式的数据,并通常会写入文件。具体行为取决于所使用的库。 #### PyYAML 中的 `yaml.dump()` 在 PyYAML 库里,`yaml.dump()` 负责把 Python 数据结构转换成 YAML 格式的字符串或保存至文件[^1]: ```python import yaml data = { 'name': 'Alice', 'age': 28, 'is_student': True } with open('output.yaml', 'w') as file: yaml.dump(data, file) print("Data has been written to output.yaml") ``` 这段代码展示了如何利用 `yaml.dump()` 把字典类型的变量 `data` 存储到名为 `output.yaml` 的文件当中去。 #### JSON 模块中的 `json.dump()` 对于 Python 自带的 json 模块而言,`json.dump()` 可以实现相同的功能——即把 Python 字典转存为 JSON 文件的内容[^3][^4]: ```python import json person_dict = {"name": "John", "age": 30} with open('person.json', 'w') as f: json.dump(person_dict, f, indent=4) # 输出确认信息 print(f"Person dictionary dumped into person.json successfully.") ``` 此例子说明了怎样通过指定参数来控制输出样式(比如缩进),从而让生成的 JSON 更加易读。 #### 参数解释 - **obj**: 需要被序列化的 Python 对象。 - **fp**: 类似于文件的对象;可以是一个实际打开的文件句柄或者是任何实现了 write 方法的东西。 - **skipkeys (可选)**: 如果设置为 true,则跳过不可作为键使用的项,默认 false。 - **ensure_ascii (可选)**: 默认情况下所有的非 ASCII 字符都会被编码为 \uXXXX 形式除非该选项设为 False。 - **check_circular (可选)**: 若开启则检测循环引用以防无限递归错误发生,默认启用。 - **allow_nan (可选)**: 控制是否允许特殊浮点数 NaN/Inf/-Inf 编码进入 JSON 文本,默认允许。 - **indent (可选)**: 定义每层嵌套前缀空白字符数量以便美化打印效果。 - **separators (可选)**: 设置分隔符元组 ('item_separator', 'key_separator') 来改变默认风格。 - **sort_keys (可选)**: 当设定为 True 时按照字母顺序排列 key-value 键值对,默认不排序。 - **cls (可选)**: 提供自定义的 JSONEncoder 子类实例用来扩展支持更多类型对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木彳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值