我需要调用一个用 ASP.NET MVC 编写的接受 JSON 作为输入的 Web 服务。 JSON 包含一个日期字段。 ASP.NET 期望日期像这样序列化:
\/Date(1371071410)\/
(注意:这是一个反斜杠后跟一个正斜杠;本质上,一个转义的正斜杠,这是有效的 JSON,尽管您通常不会这样做。)
我试图说服 Python 的 json 库像这样对日期时间进行编码,但到目前为止还没有成功。基本上,如果我尝试像上面那样对其进行编码,json 库会转义反斜杠,将字符串转换为:
\\/Date(1371071409)\\/
(注意双反斜杠。)
这使得 ASP.NET 的反序列化器拒绝将其解析为日期。
我该怎么做才能防止 Python 的 json 库避免转义反斜杠?
请您参考如下方法:
所有的字符串编码都发生在json.encoder模块中,更具体地说是在encode_basestring中。 , 和 encode_basestring_ascii功能。
因此,要更改字符串的编码方式,您可以包装这些函数以返回您需要的表示形式。
或者,如果你看看编码器是如何encodes an 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)}))
打印:
{"date": "\/Date(1371071409)\/"}
