Mein Projekt empfängt derzeit eine JSON-Nachricht in Python, aus der ich Informationen abrufen muss. Zu diesem Zweck setzen wir es auf einen einfachen JSON in einer Zeichenfolge:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Bisher habe ich JSON-Anfragen mithilfe einer Liste generiert und dann json.dumps
, aber um das Gegenteil davon zu tun, muss ich sie verwenden json.loads
. Ich hatte jedoch nicht viel Glück damit. Könnte mir jemand einen Ausschnitt zur Verfügung stellen, der "2"
mit der Eingabe von "two"
im obigen Beispiel zurückkehren würde?
'
Zeichenfolgenbegrenzer in einfachen Anführungszeichen verwenden, haben Sie möglicherweise stattdessen versehentlich Zeichenfolgendarstellungen für Python-Wörterbücher erstellt. JSON verwendet immer"
Trennzeichen . Wenn ja, reparieren Sie Ihren Code, der diese Ausgabejson.dumps()
anstelle vonstr()
oder erzeugtrepr()
, und gehen Sie zu Konvertieren einer Zeichenfolgendarstellung eines Wörterbuchs in ein Wörterbuch? um herauszufinden, wie Sie Ihre Python-Daten wiederherstellen können. Andere Hinweise, die Sie ein Python-Literal haben? Suchen Sie nachNone
,True
oderFalse
würde JSON verwendennull
,true
&false
.'
einfachen Anführungszeichen), kann auch hier nachsehen: stackoverflow.com/questions/41168558/…Antworten:
Sehr einfach:
quelle
import simplejson as json
..load
Methode anstelle von.loads
Manchmal ist dein json kein String. Zum Beispiel, wenn Sie einen JSON von einer URL wie dieser erhalten:
Sie müssen json.load verwenden, nicht json.loads:
(es ist leicht zu vergessen: das 's' steht für 'string')
quelle
Verwenden Sie für URL oder Datei
json.load()
. Verwenden Sie für Zeichenfolgen mit .json-Inhaltjson.loads()
.quelle
Das folgende einfache Beispiel kann Ihnen helfen:
Die Ausgabe für den obigen Code lautet:
Beachten Sie, dass Sie das ident-Argument von dump so festlegen können, dass es wie folgt gedruckt wird (z. B. bei Verwendung von print json.dumps (data, indent = 4)):
quelle
Kann entweder json- oder ast-Python-Module verwenden:
quelle
ast.literal_eval()
Funktion für JSON, weil jenseits Ihrer trivial Text-und-integer-nur Beispiele , die Sie wird auf Probleme stoßen. JSON ist nicht Python . Nur weil einige JSONs analysiert werden können, istast.literal_eval()
dies kein angemessener Ansatz.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
verwendenast.literal_eval()
, weil es NULL - Wert enthält, einen Booleschen Wert, und einen einzigen Nicht-BMP - Codepunkt. JSON stellt diese Werte anders dar als Python-Literale.json.loads()
auf der anderen Seite, hat keine Probleme mit diesem Eingang und dekodiert richtig , dass zu{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
ist es etwas langsamer und kann nicht angepasst werden. Sie sollten es niemals zum Dekodieren von JSON verwenden .