2017-08-07 1 views
1

Ich habe einige lästige Elemente in einer JSON-Datei, die wie etwas gehen:Entfernen Funktion Wrapper mit str.replace() in Python

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

wo dies mit json.Load() führt zu einem Fehler serializing weil Date() nicht erkannt wird .

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 

so die einfachste Sache zu tun ist, bevor serializing die Date() Wrapper zu entfernen. Ich kann dann später zum richtigen Datumzeitpunkt konvertieren.

Ich kann mit str.replace einfachen Dinge tun, wie zum Beispiel:

data.replace("Date(","") 

aber offensichtlich bin ich nicht die hintere Halterung zu entfernen.

Wie kann ich das machen?

Prost.

+0

Das ist nicht eine gültige allgemeine json ist. Versuchen Sie nur das "Date" selbst zu ersetzen – Netwave

+0

Leider habe ich keine Kontrolle, wie der JSON erstellt wird. Ärgerlich aber muss nur machen – brucezepplin

+0

@brucezepplin: es ist nicht json. Melden Sie einen Fehlerbericht, wenn der Upstream angibt, dass es sich um einen JSON handelt. Related: [Konvertieren Sie seltsame Python-Datumsformat in lesbares Datum] (https://stackoverflow.com/q/28482616/4279) – jfs

Antwort

1

Die lesbare Weise wäre re-Bibliothek zu verwenden und erstellen regex:

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

danke das hat funktioniert. Ich mag die Regex-Lösung – brucezepplin

1

Ich schrieb diesen One Lined Code für Sie, es sollte das Problem lösen.

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

Formatieren Sie diesen Code mindestens, es ist viel zu lang. – Netwave

+0

eine Sekunde @DanielSanchez – Veltro

Verwandte Themen