3

我正在建造龙卷风(实际上是旋风),而 RequestHandler.write 被我的一些对象窒息。如何在龙卷风中为这些对象编写 JSONencoder?

一个复杂的问题:一些对象是从外部库借来的,所以我真的无法访问它们的构造函数。

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

4

4 回答 4

3

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

import json
json._default_encoder = YourJSONEncoder() #patch json
于 2013-11-01T08:38:40.410 回答
2

基本上,答案是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)
于 2012-05-08T17:05:14.187 回答
1

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

    import json

    dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
    response = json.dumps(data, ensure_ascii=False, default=dthandler)
于 2012-05-03T14:14:39.483 回答
0

这是我的猴子补丁:

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
于 2013-11-19T10:44:12.577 回答