sqlalchemy关联代理的json序列化

2024-03-29 13:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我用json.dumps序列化SQLAlchemy映射对象。我希望我的对象的association proxy属性也能正确序列化。默认情况下,它们不能正确序列化,因此我不得不编写一个特定的JSON编码器:

from sqlalchemy.ext.associationproxy import _AssociationList
class MyEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, _AssociationList):
            return list(obj)
        return JSONEncoder.default(self, obj)

这看起来不太好,因为我需要导入_AssociationList,这是SQLAlchemy的私有属性。在

还有其他选择吗?在


Tags: 对象selfjsonobjdefaultreturn属性序列化
1条回答
网友
1楼 · 发布于 2024-03-29 13:47:36

您可以做一个更通用的测试,而不是检查特定于\u AssociationList的类型:is“like”是一个列表吗?然后将其序列化为列表!(duck类型,请参见Python: check if an object is a list or tuple (but not string))。在

def is_sequence(arg):
    return (not hasattr(arg, "strip") and
        hasattr(arg, "__getitem__") or
        hasattr(arg, "__iter__"))

class MyEncoder(JSONEncoder):
    def default(self, obj):
        if is_sequence(obj):
            return list(obj)
        return JSONEncoder.default(self, obj)

这将把集合、元组、关联列表和列表本身视为列表!但不是字符串、整数等等。在

相关问题 更多 >