Skip to main content
 首页 » 编程设计

python之使用 Python 序列化 ASP.NET 风格的 JSON 日期

2024年08月29日22yjmyzz

我需要调用一个用 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)\/"}