我正在尝试将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会给我带来同样的错误。
答案 0 :(得分:3)
您可以定义,例如,您可以定义自己的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"}'
答案 1 :(得分: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"}'