2016-10-11 4 views
2

Ich habe einen JSON-String, aus dem ich einen Eigenschaftswert mit Python zu extrahieren versuchen, wie unten gezeigt:Wie wird eine leere Zeichenfolge zurückgegeben, wenn die Eigenschaft in der JSON-Zeichenfolge nicht vorhanden ist?

def extract_property(node, to_extract): 
    data, stat = zk.get(node) 
    jsonString = data.decode("utf-8") 
    jStr = json.loads(jsonString) 
    return jStr[to_extract] 

es möglich, nun ist, den Wert der Eigenschaft, die ich, dass nicht existiert zu extrahieren versuchen JSON-Zeichenfolge, so dass es fehlschlägt. Wie kann ich eine leere Zeichenfolge zurückgeben, wenn in der JSON-Zeichenfolge überhaupt keine Eigenschaft vorhanden ist?

Diese Zeile kann fehlschlagen, wenn die Eigenschaft nicht existiert.

return jStr[to_extract] 
+0

'wenn to_extract in jStr:' – Barmar

+0

können nicht nur Sie gehen 'wenn jStr [to_extract]: return jStr [to_extract] anderes: Keine zurückgeben – MooingRawr

+0

@MooingRawr Das wird den gleichen Fehler erhalten, wenn die Eigenschaft nicht existiert. – Barmar

Antwort

1

Verwenden Sie einfach dict.get(), d.h .:

return jStr.get(to_extract, '') 

https://docs.python.org/3/library/stdtypes.html#dict.get Siehe für weitere Details.

UPD:

Dank @jez für den Hinweis auf, dass jStr kein Wörterbuch sein garantiert. Das Ergebnis für das JSON-Parsing ist jedoch bekannt: Wenn es kein Wörterbuch ist, dann ist es eine Liste, Nummer oder ein String. In diesem Fall wickeln Sie es in eine Art Prüfroutine, zB:

try: 
    return jStr[to_extract] 
except (KeyError, AttributeError): 
    return '' 
+0

Was das tun wird? Kannst du mir ein bisschen erklären? – john

+0

das verknüpfte Dokument scheint ziemlich einfach – Batsu

+0

Ist das Python 3-Feature? Es funktioniert überhaupt nicht für mich. Ich bin auf 2.7.3 und kann nicht upgraden. – john

1

Wie Zaur, habe ich auch jStr.get(to_extract, '') vorgeschlagen, aber ich nehme an der Einwand der OP darauf ist, dass jStr Macht oder nicht eine sein könnte dict (Wenn es ein dict ist, dann funktioniert .get() in Python 2 oder 3). Wenn das das Problem ist, dann könnte die folgenden ein breiteres Spektrum der Fälle abdecken:

try: return jStr[to_extract] 
except: return '' 
Verwandte Themen