Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 瓶子框架:如何在JSON响应中返回datetime_Python_Json_Datetime_Bottle_Bson - Fatal编程技术网

Python 瓶子框架:如何在JSON响应中返回datetime

Python 瓶子框架:如何在JSON响应中返回datetime,python,json,datetime,bottle,bson,Python,Json,Datetime,Bottle,Bson,当我试图返回包含datetime值的JSON时,我得到 File "/usr/lib/python2.7/json/encoder.py", line 178, in default raise TypeError(repr(o) + " is not JSON serializable") TypeError: datetime.datetime(2014, 2, 1, 0, 0) is not JSON serializable 这是正常的。有没有一种简单的方法可以将对象挂钩添

当我试图返回包含
datetime
值的JSON时,我得到

  File "/usr/lib/python2.7/json/encoder.py", line 178, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2014, 2, 1, 0, 0) is not JSON serializable
这是正常的。有没有一种简单的方法可以将对象挂钩添加到
瓶子

from bson import json_util
import json
json.dumps(anObject, default=json_util.default)

要转换
datetime
值?

有趣的问题!我可以看到两种方法。一种方法是编写一个定制插件来包装
JSONPlugin

from bottle import route, run, install, JSONPlugin
from bson import json_util

class JSONDefaultPlugin(JSONPlugin):
    def __init__(self):
        super(JSONDefaultPlugin, self).__init__()
        self.plain_dump = self.json_dumps
        self.json_dumps = lambda body: self.plain_dump(body, default=json_util.default)
然后可以这样使用:

@route('/hello')
def index(name):
    return {'test': datetime.datetime(2014, 2, 1, 0, 0)}

install(JSONDefaultPlugin())
run(host='localhost', port=8080)
{"test": {"$date": 1391212800000}}
并将给出如下输出:

@route('/hello')
def index(name):
    return {'test': datetime.datetime(2014, 2, 1, 0, 0)}

install(JSONDefaultPlugin())
run(host='localhost', port=8080)
{"test": {"$date": 1391212800000}}
另一种较短的方法是,在实例化JSONPlugin类时,只需指定
json\u loads
参数:

import json
from bson import json_util

install(JSONPlugin(json_dumps=lambda body: json.dumps(body, default=json_util.default)))
这会产生相同的结果

背景 当您查看(为了简洁起见,下面删除了一些部分)时,这一切就更有意义了:


我们需要做的就是确保对
的调用转储那里的
接收到您希望提供的
默认值
关键字参数。

为什么不使用类似于
datetime.strftime(o,,%Y-%m-%d%H:%m')
?此@arocks的可能重复项否,我问的是一个瓶子框架,它能在响应时自动将DICT转换成json数据。@fp我想用框架工具来实现。你能告诉我们你的返回方法吗?回答得很好!我懒得看一下源代码:-)或者这个缩写
battle.install(battle.JSONPlugin(json\u dumps=json\u util.dumps))