3

私はトルネード (実際にはサイクロン) で構築していますが、RequestHandler.write がオブジェクトの一部を窒息させています。tornado でこれらのオブジェクトの JSONencoder を作成するにはどうすればよいですか?

複雑な問題が 1 つあります。一部のオブジェクトは外部ライブラリから借用されているため、実際にはそれらのコンストラクターにアクセスできません。

コードを投稿していないことをお詫びします。ここから始める方法がわかりません。

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 に答える