【问题标题】:serializing sqlalchemy class to json将 sqlalchemy 类序列化为 json
【发布时间】:2012-02-22 21:38:27
【问题描述】:

我正在尝试将 sqlalchemy 查询的结果(列表)序列化为 json。

这是类:

class Wikilink(Base):

    __tablename__='Wikilinks'
    __table_args__={'extend_existing':True}

    id = Column(Integer,autoincrement=True,primary_key=True)
    title = Column(Unicode(350))
    user_ip = Column(String(50))
    page = Column(String(20))
    revision = Column(String(20))
    timestamp = Column(String(50))

我想我的问题出在__repr__(self): 函数上。 我试过类似的东西:

return '{{0}:{"title":{1}, "Ip":{2}, "page":{3} ,"revision":{4}}}'.format(self.id,self.title.encode('utf-8'),self.user_ip,self.page,self.revision)

或:

return '{"id"={0}, "title"={1}, "Ip"={2}}'.format(self.id,self.title.encode('utf-8'),self.user_ip.encode('utf-8'),self.page,self.revision)

我得到了:

TypeError(repr(o) + " is not JSON serializable")
ValueError: Single '}' encountered in format string

我试过了:

return '{id=%d, title=%s, Ip=%s}'%(self.id,self.title.encode('utf-8'),self.user_ip.encode('utf-8'))

我得到了:

TypeError: {id=8126, title=1 בדצמבר, Ip=147.237.70.106} is not JSON serializable

像这样添加“”(根据 JSON 格式):"id"="%d", "title"="%s", "Ip"="%s" 也没有帮助。

我知道这应该很简单,但我就是做不到

实际上瓶子正在自动处理 jsonification 部分,但尝试在结果上调用 json.dumps 会给我同样的错误。

【问题讨论】:

    标签: python json sqlalchemy


    【解决方案1】:

    您可以定义自己的 to_dict 方法,而不是尝试将字符串转换为 json,该方法返回您似乎正在尝试创建的字典结构,然后从该结构生成 json :

    >>> import json
    >>> d = {'id':8126, 'title':u'1 בדצמבר', 'ip':'147.237.70.106'}
    >>> json.dumps(d)
    '{"ip": "147.237.70.106", "id": 8126, "title": "1 \\u05d1\\u05d3\\u05e6\\u05de\\u05d1\\u05e8"}'
    

    【讨论】:

      【解决方案2】:

      我不确定我是否理解您的尝试。难道你不能构建dict 并让json.dumps() 为你完成这项工作吗?

      类似:

      >>> class Foo:
      ...     id = 1
      ...     title = 'my title'
      ...     to_jsonize = ['id', 'title']
      >>>
      >>> dct = {name: getattr(Foo,name) for name in Foo.to_jsonize}
      >>> import json
      >>> json.dumps(dct)
      '{"id": 1, "title": "my title"}'
      

      【讨论】:

        猜你喜欢
        • 2011-06-28
        • 2021-06-27
        • 2015-12-27
        • 2016-06-27
        • 2018-11-04
        相关资源
        最近更新 更多