如何使用webpy将MySQL查询格式化为JSON?

1 投票
2 回答
1812 浏览
提问于 2025-04-16 18:39

我正在用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)

撰写回答