2

我需要调用一个用 ASP.NET MVC 编写的 Web 服务,它接受 JSON 作为输入。JSON 包含一个日期字段。ASP.NET 期望日期像这样被序列化:

\/Date(1371071410)\/

(注意:这是一个反斜杠,后跟一个正斜杠;本质上是一个转义的正斜杠,它是有效的 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 回答