Gibt es in Python eine Möglichkeit, zu überprüfen, ob eine Zeichenfolge JSON-gültig ist, bevor Sie versuchen, sie zu analysieren?
Wenn Sie beispielsweise mit der Facebook Graph-API arbeiten, wird manchmal JSON zurückgegeben, manchmal wird eine Bilddatei zurückgegeben.
Antworten:
Sie können versuchen, zu tun
json.loads()
, die ein werfen wirdValueError
wenn die übergebene Zeichenfolge nicht als JSON dekodiert werden kann.Im Allgemeinen wird die " pythonische " Philosophie für diese Art von Situation EAFP genannt , damit es einfacher ist, um Vergebung zu bitten als um Erlaubnis .
quelle
loads
in der Except-Klausel übergeben haben?10
ist ein gültiger JSON-Nummernwert.Beispiel Ein Python-Skript gibt einen Booleschen Wert zurück, wenn eine Zeichenfolge gültig ist. Json:
Welche Drucke:
Konvertieren Sie eine JSON-Zeichenfolge in ein Python-Wörterbuch:
Konvertieren Sie ein Python-Objekt in eine JSON-Zeichenfolge:
Wenn Sie auf Parsing auf niedriger Ebene zugreifen möchten, rollen Sie keine eigene, sondern verwenden Sie eine vorhandene Bibliothek: http://www.json.org/
Tolles Tutorial zum Python JSON-Modul: https://pymotw.com/2/json/
Ist String JSON und zeigt Syntaxfehler und Fehlermeldungen:
Drucke:
json_xs
ist in der Lage, Syntax zu überprüfen, zu analysieren, zu analysieren, zu codieren, zu decodieren und vieles mehr:https://metacpan.org/pod/json_xs
quelle
del json_object
einmal validiert werden?try
. #StopCanaryAbuseIch würde sagen, das Parsen ist der einzige Weg, den man wirklich vollständig erkennen kann. Eine Ausnahme wird durch die Python-
json.loads()
Funktion (mit ziemlicher Sicherheit) ausgelöst, wenn nicht das richtige Format. Für die Zwecke Ihres Beispiels können Sie jedoch wahrscheinlich nur die ersten paar Nicht-Leerzeichen überprüfen ...Ich bin nicht mit dem JSON vertraut, das Facebook zurücksendet, aber die meisten JSON-Zeichenfolgen von Web-Apps beginnen mit einem offenen Quadrat
[
oder einer geschweiften{
Klammer. Keine mir bekannten Bildformate beginnen mit diesen Zeichen.Wenn Sie hingegen wissen, welche Bildformate möglicherweise angezeigt werden, können Sie den Anfang der Zeichenfolge auf ihre Signaturen überprüfen, um Bilder zu identifizieren, und davon ausgehen, dass Sie JSON haben, wenn es sich nicht um ein Bild handelt.
Ein weiterer einfacher Hack zum Identifizieren einer Grafik anstelle einer Textzeichenfolge, falls Sie nach einer Grafik suchen, besteht darin, die ersten paar Dutzend Zeichen der Zeichenfolge auf Nicht-ASCII-Zeichen zu testen (vorausgesetzt, der JSON ist ASCII ).
quelle
Ich habe eine generische, interessante Lösung für dieses Problem gefunden:
und Sie können es so verwenden:
quelle
except
Klausel jede ernsthafte Ausnahme verbergen. Das Fangen von Ausnahmen muss so restriktiv wie möglich sein.