0

JSON を送信するときに、文字列フィールド内の HTML 文字をエスケープ解除する便利な方法が必要です。カスタムjson.JSONEncoderを書くとうまくいくと思いました。私のエンコーダは次のようになります。

import jinja2, json

class EscapingJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, basestring):
            obj = jinja2.Markup(obj).unescape()
        return json.JSONEncoder.default(self, obj)

内部にデバッグステートメントを配置しましたdefaultが、表示されなかったので、カスタムdefault実装に到達する前にエンコーダーが文字列エンコーディングを処理すると想定しています。

どうすればこれを達成できますか?

4

1 に答える 1

0

「デフォルト」は文字列データ型に対して呼び出されないため、encode メソッドをオーバーライドする必要があります。

class EscapingJSONEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, basestring):
            obj = jinja2.Markup(obj).unescape()
        return json.JSONEncoder.encode(self, obj)
于 2012-04-04T22:13:53.353 に答える