page contents

python JSON编码器中的`default`参数用法

在 Python 的 json 模块中,default 参数用于处理那些 JSON 编码器无法直接序列化的对象。默认情况下,json.dumps() 只能序列化基本的数据类型如字典、列表、字符串、整数、浮点数和布尔值等。如果你尝试序列化一个自定义对象或不支持的类型(例如 datetime 对象),将会抛出 TypeError。

attachments-2025-05-Sdg8CEbF68214e89f14a1.jpg在 Python 的 json 模块中,default 参数用于处理那些 JSON 编码器无法直接序列化的对象。默认情况下,json.dumps() 只能序列化基本的数据类型如字典、列表、字符串、整数、浮点数和布尔值等。如果你尝试序列化一个自定义对象或不支持的类型(例如 datetime 对象),将会抛出 TypeError。

为了处理这种情况,你可以通过传递一个函数给 json.dumps() 或者继承 json.JSONEncoder 类并重写 default() 方法来指定如何序列化这些特殊类型的对象。这个函数或方法应该接受一个参数(即要序列化的对象),并且返回该对象的一个可序列化的表示形式。如果对象类型仍然无法被序列化,则应调用基类的 default() 方法来引发适当的异常。

使用 default 参数的基本示例

假设你有一个包含 datetime 对象的字典,并希望将其转换为 JSON 字符串:

import jsonfrom datetime import datetimedata = {    "time": datetime.now()}def custom_serializer(obj):    """自定义序列化函数"""    if isinstance(obj, datetime):        return obj.isoformat()  # 将 datetime 转换为 ISO 格式的字符串    raise TypeError(f"Type {type(obj)} not serializable")json_str = json.dumps(data, default=custom_serializer)print(json_str)# 输出类似于:{"time": "2025-05-07T16:39:45.123456"}在这个例子中,custom_serializer 函数检查传入的对象是否为 datetime 类型。如果是,则使用 isoformat() 方法将其转换为字符串格式;如果不是,则通过 raise TypeError 抛出异常,提示该类型不可序列化。

继承 JSONEncoder 类

除了直接提供 default 函数外,还可以通过继承 json.JSONEncoder 来创建自己的编码器类,并重写 default() 方法:

class CustomEncoder(json.JSONEncoder):    def default(self, obj):        if isinstance(obj, datetime):            return obj.isoformat()        # 如果对象不是 datetime 类型,则调用基类的方法        return super().default(obj)json_str = json.dumps(data, cls=CustomEncoder)print(json_str)# 输出类似于:{"time": "2025-05-07T16:39:45.123456"}

这种方式更灵活,特别适合于需要在多个地方复用相同序列化逻辑的情况。

总结

default 参数允许你指定如何序列化那些 json 模块默认不支持的对象。

它可以是一个函数,该函数接收一个对象作为输入,并返回其可序列化的表示形式。

或者可以通过继承 JSONEncoder 并重写 default() 方法来自定义整个编码过程。

当遇到不支持的类型时,确保你的 default 函数或方法最终会调用基类的 default() 方法以避免遗漏错误。

这种方法极大地扩展了 json 模块的功能,使得它可以处理更多种类的数据结构。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-05-12 09:27
  • 阅读 ( 60 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1319 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2152 文章
  3. Pack 1319 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章