2012-04-27 70 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