如何使用webpy将MySQL查询格式化为JSON?
我正在用webpy查询一个MySQL数据库。从SQL查询中,我得到了以下内容。
<Storage {'title': u'Learn web.py', 'done': 0, 'id': 0L, 'mytime': datetime.datetime(2011, 5, 30, 10, 53, 9)}>
我尝试用json.dumps(data)
把数据转成JSON格式,但出现了一个错误,提示数据无法被序列化。
我可以逐个遍历每个键值对,把它们放进另一个字典里,但这样感觉工作量太大了。
有没有什么好的方法可以解决这个问题?
编辑:
我觉得我的问题是因为数据中有datetime.datetime(2011, 5, 30, 10, 53, 9)
这个时间格式。我把数据库中的mytime
列去掉了,结果一切都正常了。有没有办法把mytime
列包含进JSON字符串里呢?
2 个回答
0
试着把它转换成UNIX时间戳:
import time
result.mytime = time.mktime(result.mytime.utctimetuple())
1
你可以扩展 json.JSONEncoder 来处理日期:
我没有用 Storage 对象作为参数进行测试,但正如你所说,当查询中没有日期时它是可以工作的,我觉得这样做应该没问题。(有关如何扩展编码器对象的信息,可以查看 json 模块的 文档)。
import datetime, json
class ExtendedEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
# If it's a date, convert to a string
# Replace this with whatever your preferred date format is
return o.strftime("%Y-%m-%d %H:%M:%S")
# Defer to the superclass method
return json.JSONEncoder(self, o)
然后,如果 "result" 是你的存储对象
json_string = json.dumps(result, cls=ExtendedEncoder)