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

如何将包含自定义SQLModel对象的Python列表编码为JSON以进行网络传输?

解决SQLModel对象列表转JSON的问题

我来帮你搞定这个问题!你遇到的核心问题是:JSON默认编码器没法识别SQLModel的自定义Hero实例,所以直接返回列表会失败。这里有几个实用的解决方案,你可以根据自己的场景选:

方案1:手动将每个Hero实例转为字典(最简单直接)

因为SQLModel继承自Pydantic,每个模型实例都自带dict()方法,能直接把对象转成JSON可序列化的字典结构。修改你的代码如下:

@cherrypy.tools.json_out()
def display(self):
    with Session(engine) as session:
        statement = select(Hero)
        results = session.exec(statement)
        heros = results.all()
        # 遍历列表,把每个Hero转成字典
        heros_dict_list = [hero.dict() for hero in heros]
        return heros_dict_list

这个方法的好处是简单直观,适合只在少数地方需要转换的场景,而且dict()会自动帮你处理模型里的可选字段(比如你的age=None),转成对应的JSON格式。

方案2:自定义CherryPy的JSON编码器(适合全局复用)

如果你的项目里有很多地方需要返回SQLModel对象,每次手动转字典太麻烦,可以自定义一个JSON编码器,让CherryPy自动识别并处理SQLModel实例:

首先定义编码器:

import json
from sqlmodel import SQLModel

class SQLModelJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        # 如果是SQLModel实例,转成字典
        if isinstance(obj, SQLModel):
            return obj.dict()
        # 其他类型交给默认编码器处理
        return super().default(obj)

然后在CherryPy的配置里注册这个编码器:

cherrypy.config.update({
    'tools.json_out.encoder': SQLModelJSONEncoder
})

之后你的display方法就可以直接返回heros列表了:

@cherrypy.tools.json_out()
def display(self):
    with Session(engine) as session:
        statement = select(Hero)
        results = session.exec(statement)
        heros = results.all()
        return heros

这样所有SQLModel实例都会被自动编码,不用再手动处理,非常适合大型项目。

方案3:用Pydantic的jsonable_encoder(更健壮的处理)

如果你的模型有嵌套结构或者特殊类型字段,Pydantic提供的jsonable_encoder会比直接用dict()更可靠,它能处理更多边缘情况:

from pydantic import jsonable_encoder

@cherrypy.tools.json_out()
def display(self):
    with Session(engine) as session:
        statement = select(Hero)
        results = session.exec(statement)
        heros = results.all()
        # 用jsonable_encoder转成可序列化的对象
        heros_jsonable = jsonable_encoder(heros)
        return heros_jsonable

这个方法会自动处理Pydantic模型的各种细节,比如字段验证、类型转换等,如果你需要更严谨的转换逻辑,推荐用这个。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:42:27