【发布时间】:2015-11-10 04:39:38
【问题描述】:
如何在使用 Bottle 的 json_dumps 将数据转换为 JSON 时将参数传递给默认处理函数?
编辑:我错过了将数据从
json_dumps转换回使用json_loads之前的格式的点。我使用的原因json_dumps是因为我需要将datetime格式转换为string
我将 MySQL 查询的结果作为元组列表:
data = [(u'user1', u'Topic1', datetime.datetime(2015, 8, 3, 23, 55), 2.0, 5), (u'user2', u'Topic2', datetime.datetime(2015, 8, 4, 23, 55), 3.0, 5)]
它包含一些datetime 格式的数据。我将此数据作为对 AJAX 调用的响应以 JSON 格式发送,因此我对其执行json_dumps。
现在,我不能简单地执行json_dumps(data),因为它给出了这个错误:
TypeError: datetime.datetime(2015, 8, 3, 23, 55) is not JSON serializable
所以,我定义了这个处理函数并按如下方式使用它:
def dataHandler(obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M')
json_dumps(data, default=dataHandler)
这工作正常,输出是:
'[["user1", "Topic1", "2015-08-03 23:55", 2.0, 5], ["user2", "Topic2", "2015-08-04 23:55", 3.0, 5]
现在在我的代码中的不同点,对于不同的数据,我需要不同格式的datetime。所以,我重新定义了这样的函数:
def dataHandler(obj, showTime='no'):
if isinstance(obj, datetime):
if str(showTime).lower() == 'no':
return obj.strftime('%Y-%m-%d')
elif str(showTime).lower() == 'yes':
return obj.strftime('%Y-%m-%d %H:%M')
现在,如果我执行json_dumps(data, default=dataHandler),它会正常工作,将showTime 视为no,并提供与上述相同的输出。
当我尝试向它传递一个参数时,问题就来了:
json_dumps(data, default=dataHandler('Yes'))
它给出了这个错误:
TypeError: datetime.datetime(2015, 8, 10, 23, 55) is not JSON serializable
如何在同一个函数中定义不同的这种情况?
谢谢。
【问题讨论】:
标签: python mysql json datetime bottle