我在JSON文件中有一些烦人的元素,如:
"DateTime" : Date(-62135596800000),
"ReceivedDateTime" : Date(-62135596800000)
使用json.Load()
对此进行序列化会导致错误,因为无法识别Date()。
Traceback (most recent call last):
File "json_parse.py", line 10, in <module>
data = json.load(data_file)
File "C:\Python27\lib\json\__init__.py", line 291, in load
**kw)
File "C:\Python27\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
所以最简单的方法是在序列化之前删除Date()
包装器。之后我可以转换为正确的日期时间。
我可以用str.replace做简单的事情,例如:
data.replace("Date(","")
但显然我没有删除尾随括号。
我该怎么做呢?
干杯。
答案 0 :(得分:1)
我为你写了这段代码,它应该解决问题。
a = '''"DateTime" : Date(-62135596800000),
"ReceivedDateTime" : Date(-62135596800000)'''
while "Date(" in a: a = (a[:a.index("Date(")+len("Date(")+a[a.index("Date(")+len("Date("):].index(")")] + a[a.index("Date(")+len("Date(")+a[a.index("Date(")+len("Date("):].index(")")+1:]).replace("Date(", "", 1)
答案 1 :(得分:1)
更可读的方法是使用re库并创建正则表达式:
import re
text = '''"DateTime" : Date(-62135596800000),
"ReceivedDateTime" : Date(-62135596800000)'''
pattern = re.compile("Date\((.+)\)")
x = pattern.findall(text)
text2 = text
for i in x:
text2 = text2.replace("Date("+i+")", i)