python/tornado中的自定义json编码器

python/tornado中的自定义json编码器,python,json,tornado,cyclone,Python,Json,Tornado,Cyclone,我正在tornado(实际上是cyclone)中构建,RequestHandler.write被我的一些对象阻塞了。如何为tornado中的这些对象编写JSONencoder 一个复杂问题是:有些对象是从外部库借用的,因此我实际上无法访问它们的构造函数 很抱歉没有发布代码--我只是不知道如何开始这里。对于带有json格式的datetime对象,它看起来是这样的 import json dthandler = lambda obj: obj.isoformat() if isin

我正在tornado(实际上是cyclone)中构建,RequestHandler.write被我的一些对象阻塞了。如何为tornado中的这些对象编写JSONencoder

一个复杂问题是:有些对象是从外部库借用的,因此我实际上无法访问它们的构造函数


很抱歉没有发布代码--我只是不知道如何开始这里。

对于带有json格式的datetime对象,它看起来是这样的

    import json

    dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
    response = json.dumps(data, ensure_ascii=False, default=dthandler)

基本上,答案是tornado不支持自定义json格式,因此您必须使用json库。下面是我最后使用的代码:

import json

class MongoEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, ObjectId):
            return str(obj)
        return json.JSONEncoder.default(self, obj)

print json.dumps(my_mong_obj, cls=MongoEncoder, indent=2)

是的,您可以更改默认编码器,方法是在主循环之前添加此编码器

import json
json._default_encoder = YourJSONEncoder() #patch json

这是我的猴子补丁:

导入json,日期时间 从龙卷风中逃生 DT_HANDLER=lambda obj:obj.isoformat()如果isinstance(obj,datetime.datetime)或isinstance(obj,datetime.date)没有其他值 def json_编码(值):
return json.dumps(value,default=DT_HANDLER).replace(“是否有办法将其连接为我的应用程序中每个处理程序的默认输出?@tututuca在一个python类中定义它,并从该python类导入,而不是
import json
。您还可以尝试通过继承在处理程序对象中设置它。