我在龍捲風(實際上是旋風)中建造,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