我正在建造龙卷风(实际上是旋风),而 RequestHandler.write 被我的一些对象窒息。如何在龙卷风中为这些对象编写 JSONencoder?
一个复杂的问题:一些对象是从外部库借来的,所以我真的无法访问它们的构造函数。
很抱歉没有发布代码——我只是不知道如何从这里开始。
是的,您可以更改默认编码器,方法是在您的主循环之前添加它
import json
json._default_encoder = YourJSONEncoder() #patch json
基本上,答案是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)
对于具有 json 格式的 datetime 对象,它看起来像这样
import json
dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
response = json.dumps(data, ensure_ascii=False, default=dthandler)
这是我的猴子补丁:
import json, datetime
from tornado import escape
DT_HANDLER = lambda obj: obj.isoformat() if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None
def json_encode(value):
return json.dumps(value, default=DT_HANDLER).replace("</", "<\/")
escape.json_encode = json_encode