2017-08-07 54 views
1
str.replace()

我有一個JSON文件中的一些惱人的元素去是這樣的:刪除功能的包裝可以用Python

"DateTime" : Date(-62135596800000), 
    "ReceivedDateTime" : Date(-62135596800000) 

連載地方使用這個結果json.Load()一個錯誤,因爲日期()是無法識別。

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

這不是一個有效的通用JSON。嘗試更換'日期'本身 – Netwave

+0

不幸的是,我不能控制如何創建json。討厭,但只需要做 – brucezepplin

+0

@brucezepplin:它不是JSON。如果上游聲稱它是JSON,請提交錯誤報告。相關:[將奇怪的Python日期格式轉換爲可讀的日期](https://stackoverflow.com/q/28482616/4279) – jfs

回答

1

更可讀的方式是使用重庫,並創建正則表達式:

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) 
+0

感謝這工作。我喜歡正則表達式的解決方案 – brucezepplin

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) 
+0

至少編碼格式,其方式太長。 – Netwave

+0

一秒@DanielSanchez – Veltro