我在龙卷风(实际上是旋风)中建造,RequestHandler.write在我的一些对象上窒息。如何在龙卷风中为这些对象编写JSONencoder?python /龙卷风中的自定义json编码器
一个复杂因素:一些对象是从外部库中借用的,所以我没有真正访问它们的构造函数。
无法发布代码的道歉 - 我只是不知道如何开始在这里。
我在龙卷风(实际上是旋风)中建造,RequestHandler.write在我的一些对象上窒息。如何在龙卷风中为这些对象编写JSONencoder?python /龙卷风中的自定义json编码器
一个复杂因素:一些对象是从外部库中借用的,所以我没有真正访问它们的构造函数。
无法发布代码的道歉 - 我只是不知道如何开始在这里。
基本上,答案是龙卷风不支持自定义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日期对象格式化将会看起来像这样
import json
dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
response = json.dumps(data, ensure_ascii=False, default=dthandler)
是的,你可以更改默认的编码器,加入这个befor你的主循环
import json
json._default_encoder = YourJSONEncoder() #patch json
,这里是我的猴子补丁:
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
是有办法将它挂起来作为我的应用程序中每个处理程序的默认输出? – tutuca 2013-04-30 18:28:37
@tutuca在一个python类中定义它,并从该python类而不是'import json'导入。您也可以尝试通过继承在处理程序对象中进行设置。 – NuclearPeon 2017-12-19 20:17:02