我需要调用一个用ASP.NET MVC编写的Web服务,它接受JSON作为输入。 JSON包含日期字段。 ASP.NET期望日期序列化如下:
\/Date(1371071410)\/
(注意:这是一个单反斜杠后跟一个前向闪存;本质上是一个转义的正斜杠,它是有效的JSON,尽管你通常不会这样做。)
我试图说服Python的json库像这样编码datetime,但到目前为止还没有运气。基本上,如果我尝试像上面那样编码,json库会转义反斜杠,将字符串转换为:
\\/Date(1371071409)\\/
(注意双反斜杠。)
这使得ASP.NET的反序列化程序拒绝将其解析为日期。
如何防止Python的json库避免转义反斜杠?
答案 0 :(得分:3)
所有字符串编码都在json.encoder
模块中进行,更具体地说,在encode_basestring
和encode_basestring_ascii
函数中进行。
因此,要更改字符串的编码方式,可以将这些函数包装起来以返回所需的表示形式。
或者,如果您查看编码器encodes an int
的方式,可以使用自定义字符串表示法对int
进行子类化,因为此处的日期不过是一个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)\/"}