2012-02-22 47 views
3

我試圖序列化sqlalchemy查詢的結果(列表)到json。將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給了我同樣的錯誤。

回答

3

而不是嘗試將字符串轉換爲json,例如,您可以定義自己的to_dict方法,該方法返回您嘗試創建的字典結構,然後從該結構生成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"}' 
1

我不確定我是否理解你的嘗試。難道你不能建立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"}'