2012-04-27 67 views
1

我在龙卷风(实际上是旋风)中建造,RequestHandler.write在我的一些对象上窒息。如何在龙卷风中为这些对象编写JSONencoder?python /龙卷风中的自定义json编码器

一个复杂因素:一些对象是从外部库中借用的,所以我没有真正访问它们的构造函数。

无法发布代码的道歉 - 我只是不知道如何开始在这里。

回答

2

基本上,答案是龙卷风不支持自定义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) 
+0

是有办法将它挂起来作为我的应用程序中每个处理程序的默认输出? – tutuca 2013-04-30 18:28:37

+1

@tutuca在一个python类中定义它,并从该python类而不是'import json'导入。您也可以尝试通过继承在处理程序对象中进行设置。 – NuclearPeon 2017-12-19 20:17:02

1

对于JSON日期对象格式化将会看起来像这样

import json 

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

是的,你可以更改默认的编码器,加入这个befor你的主循环

import json 
json._default_encoder = YourJSONEncoder() #patch json 
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