2017-06-27 4 views
0

Ich versuche, den Wert entry von unten Zeichenfolge zu extrahieren. Ich habe versucht, die Zeichenfolge mit json.loads() zu analysieren, aber es funktioniert nicht. Stattdessen erhalte ich unten eine Fehlermeldung.Parsen Wert von JSON-Zeichenfolge schlägt fehl

Dies ist die Zeichenfolge:

output = '336,{"token":"eyJhbGc.iOiJIUzI18_YREPr50","entry":"961156ef-2a9","project":"86a8e55a-9160","tenant":["73426ca1-bde"]}' 

Dies ist mein Code:

entry_id = json.loads(output)["entry"] 

Dies ist die Fehlermeldung:

File "C:\Python27\lib\json\__init__.py", line 339, in loads 
    return _default_decoder.decode(s) 
File "C:\Python27\lib\json\decoder.py", line 367, in decode 
    raise ValueError(errmsg("Extra data", s, end, len(s))) 
ValueError: Extra data: line 1 column 4 - line 1 column 341 (char 3 - 340) 

Was kann ich dieses Problem beheben?

Antwort

1

Nur der {...} -Teil ist das JSON-Objekt, aus dem Sie diesen Wert extrahieren können. Sie müssen die Zeichenfolge vor dem Parsen aufteilen. (Sie sollten das optionale maxsplit Argument nur Split auf dem ersten Komma hinzufügen.)

Beispiel:

x, s = output.split(',', 1) 
entry_id = json.loads(s)["entry"] 

Die Zahl vor diesem Komma ist an sich schon ein gültiger JSON-Wert, sondern durch Komma getrennte Werte sind nur zulässig, innerhalb JSON-Arrays [...] oder JSON-Objekte {...}. Die Fehlermeldung weist daher darauf hin, dass in der Eingabezeichenfolge zusätzliche Daten enthalten sind, die nicht dorthin gehören. Daher müssen Sie den Wert entfernen, bevor Sie das Objekt analysieren können, das im Rest der Zeichenfolge enthalten ist.

Zum Vergleich:

0

zuerst die ersten 4 Zeichen entfernen, um einen gültigen JSON-String zu bekommen und dann json.loads() verwendet Wert von JSON-String zu erhalten.

# remove first four characters 
line = output[4:] 
# parse a value from json to get id 
entry_id = json.loads(line)["entry"] 
print entry 

Ausgang:

961156ef-2a9