You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python jsons库递归为指定类型JSON对象添加自定义字段

解决jsons库自定义序列化器无限递归问题

你的代码陷入无限递归的核心原因是:给MyFoo类型设置自定义序列化器后,在序列化器内部又调用jsons.dump(obj),而这个dump会再次触发你刚注册的自定义序列化器,形成循环调用。

要解决这个问题,你需要先获取jsons对MyFoo的默认序列化器,用它生成基础的JSON结构,再在这个基础上添加自定义字段,这种方式也能天然支持嵌套的MyFoo对象序列化。

修正后的代码示例

import jsons

# 先获取MyFoo类型的默认序列化器
default_foo_serializer = jsons.get_serializer(MyFoo)

def custom_foo_serializer(obj, **kwargs):
    # 用默认序列化器生成基础JSON
    base_json = default_foo_serializer(obj, **kwargs)
    # 添加自定义字段
    base_json['foo'] = "bar"
    return base_json

# 注册自定义序列化器
jsons.set_serializer(custom_foo_serializer, MyFoo)

# 正常序列化数据(支持嵌套MyFoo对象)
json_result = jsons.dump(data, ensure_ascii=True)

原理说明

  1. jsons.get_serializer(MyFoo)会获取到jsons原本用于序列化MyFoo的默认逻辑(通常是将对象属性转为字典),这个默认序列化器不会触发你自定义的逻辑,因此不会产生递归。
  2. 在自定义序列化器中,先通过默认逻辑得到基础JSON字典,再追加自定义字段,既保留了原对象的序列化内容,又添加了需要的字段。
  3. 嵌套的MyFoo对象在序列化时,每个对象都会被这个自定义序列化器处理,自动完成基础序列化+字段追加的流程,无需额外处理嵌套场景。

内容的提问来源于stack exchange,提问作者Krever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:05:12