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

如何序列化Python类?Flask下SiteConfig序列化失败求代码示例

嘿,作为Python新手碰到这个JSON序列化的问题太正常啦!我给你几个简单易懂的解决方案,都是能直接跑起来的代码示例,你可以根据自己的情况选~

方法1:给自定义类添加to_dict()方法(最直接)

这个方法的思路很简单:自己写一个方法,把类的属性转换成Python字典——而Flask的jsonify是可以直接序列化字典的。

class SiteConfig:
    def __init__(self, site_name, site_url, max_users):
        self.site_name = site_name
        self.site_url = site_url
        self.max_users = max_users

    # 新增这个方法,把类实例转成字典格式
    def to_dict(self):
        return {
            'site_name': self.site_name,
            'site_url': self.site_url,
            'max_users': self.max_users
        }

然后在你的Flask视图里这样调用:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/site-config')
def get_site_config():
    # 创建SiteConfig实例
    config = SiteConfig("我的Flask站点", "https://my-site.com", 200)
    # 调用to_dict转成字典,再用jsonify返回
    return jsonify(config.to_dict())

if __name__ == '__main__':
    app.run(debug=True)
方法2:自定义Flask JSON编码器(自动处理)

如果你不想每次都手动调用to_dict(),可以自定义Flask的JSON编码器,让它自动识别你的SiteConfig类并处理序列化。

from flask import Flask, jsonify
from flask.json import JSONEncoder

class SiteConfig:
    def __init__(self, site_name, site_url, max_users):
        self.site_name = site_name
        self.site_url = site_url
        self.max_users = max_users

# 自定义编码器,继承Flask默认的JSONEncoder
class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        # 如果是SiteConfig实例,就转成字典
        if isinstance(obj, SiteConfig):
            return {
                'site_name': obj.site_name,
                'site_url': obj.site_url,
                'max_users': obj.max_users
            }
        # 其他类型交给默认编码器处理
        return super().default(obj)

app = Flask(__name__)
# 把自定义编码器绑定到Flask应用上
app.json_encoder = CustomJSONEncoder

@app.route('/site-config')
def get_site_config():
    config = SiteConfig("我的Flask站点", "https://my-site.com", 200)
    # 直接传入实例,Flask会自动用自定义编码器处理
    return jsonify(config)

if __name__ == '__main__':
    app.run(debug=True)
方法3:用dataclass简化代码(Python 3.7+)

如果你用的是Python 3.7及以上版本,推荐用dataclass——它能帮你自动生成初始化方法,还自带转字典的工具,代码会更简洁。

from flask import Flask, jsonify
from dataclasses import dataclass, asdict

# 用@dataclass装饰器定义类,自动生成__init__等方法
@dataclass
class SiteConfig:
    site_name: str
    site_url: str
    max_users: int

app = Flask(__name__)

@app.route('/site-config')
def get_site_config():
    config = SiteConfig("我的Flask站点", "https://my-site.com", 200)
    # 用asdict把dataclass实例转成字典
    return jsonify(asdict(config))

if __name__ == '__main__':
    app.run(debug=True)

这三个方法都能解决你的问题,新手推荐先试方法1或者方法3,代码量少,容易理解~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:42:25