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

Pydantic v2移除json_loads/json_dumps配置,求替代方案指引

Pydantic v2 中 json_loads/json_dumps 的替代方案

1. 单模型调用时自定义处理

直接在model_dump_json()(序列化)或model_validate_json()(反序列化)方法中传入对应参数,替代原配置项:

  • 自定义序列化(替代原json_dumps):
    from pydantic import BaseModel
    import json
    from datetime import datetime
    
    def custom_encoder(obj):
        if isinstance(obj, datetime):
            return obj.isoformat() + 'Z'
        raise TypeError(f"Object of type {obj.__class__.__name__} is not JSON serializable")
    
    class Item(BaseModel):
        created_at: datetime
    
    item = Item(created_at=datetime.now())
    json_str = item.model_dump_json(encoder=custom_encoder)
    
  • 自定义反序列化(替代原json_loads):
    def custom_decoder(dct):
        if 'created_at' in dct:
            dct['created_at'] = datetime.fromisoformat(dct['created_at'].rstrip('Z'))
        return dct
    
    item = Item.model_validate_json(json_str, decoder=custom_decoder)
    

2. 全局统一配置

如果需要让所有模型共享自定义逻辑,可以封装一个基类,把参数固化到方法中:

from pydantic import BaseModel

class CustomBaseModel(BaseModel):
    @classmethod
    def validate_json(cls, json_str: str):
        return cls.model_validate_json(json_str, decoder=custom_decoder)

    def dump_json(self):
        return self.model_dump_json(encoder=custom_encoder)

# 后续业务模型直接继承该基类
class Item(CustomBaseModel):
    created_at: datetime

3. 单个字段级别的自定义处理

针对特定字段的JSON序列化需求,结合Json类型字段的serialize和deserialize参数实现:

from pydantic import BaseModel, Json
from typing import Any

def custom_json_serialize(value: Any) -> str:
    return json.dumps(value, default=custom_encoder)

def custom_json_deserialize(value: str) -> Any:
    return json.loads(value, object_hook=custom_decoder)

class Item(BaseModel):
    data: Json[Any] = Json(..., serialize=custom_json_serialize, deserialize=custom_json_deserialize)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:32:23