我正在尝试使用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字符串中?
答案 0 :(得分:1)
您可以扩展json.JSONEncoder来处理日期:
我没有使用Storage对象作为参数对此进行测试,但正如您所说,当查询中没有日期时它会起作用,我认为这应该有效。 (有关扩展编码器对象的信息,请参阅json模块docs。)
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)
答案 1 :(得分:0)
尝试将其转换为UNIX时间戳:
import time
result.mytime = time.mktime(result.mytime.utctimetuple())