2

JSON を入力として受け入れる ASP.NET MVC で記述された Web サービスを呼び出す必要があります。JSON には日付フィールドが含まれています。ASP.NET は、日付が次のようにシリアル化されることを想定しています。

\/Date(1371071410)\/

(注: これは 1 つのバックスラッシュの後に 1 つのスラッシュが続きます。本質的には、エスケープされたスラッシュであり、有効な JSON ですが、通常はそうしません。)

このように日時をエンコードするようにPythonのjsonライブラリを説得しようとしていますが、今のところうまくいきません。基本的に、上記のようにエンコードしようとすると、json ライブラリはバックスラッシュをエスケープし、文字列を次のように変換します。

\\/Date(1371071409)\\/

(二重のバックスラッシュに注意してください。)

これにより、ASP.NET のデシリアライザーは日付としての解析を拒否します。

Python の json ライブラリがバックスラッシュをエスケープしないようにするにはどうすればよいですか?

4

1 に答える 1

3

すべての文字列エンコーディングは、json.encoderモジュール、より具体的にはencode_basestring, およびencode_basestring_ascii関数で行われます。

したがって、文字列のエンコード方法を変更するには、これらの関数をラップして必要な表現を返すことができます。

または、エンコーダーがをエンコードするint方法を見ると、カスタム文字列表現でサブクラス化できintます。ここでの Date は int よりもはるかに多くないためです。

import json

class IntDate(int):
    def __str__(self):
        return r'"\/Date(%s)\/"' % super(IntDate, self).__str__()

print(json.dumps({'date': IntDate(1371071409)}))

プリント:

{"日付": "\/日付(1371071409)\/"}
于 2013-06-13T15:55:10.240 に答える