Was ist in Python der Unterschied zwischen json.load()
und json.loads()
?
Ich denke , dass die Last () Funktion mit einem Dateiobjekt verwendet werden muss (Ich brauche also einen Kontext - Manager zu verwenden) , während die Lasten () Funktion , um den Pfad zur Datei als String nehmen. Es ist ein bisschen verwirrend.
Steht der Buchstabe " s " json.loads()
für Zeichenfolge ?
Vielen Dank für Ihre Antworten!
python
json
python-2.7
MMF
quelle
quelle
json.loads(s, *)
- Deserializes
(astr
,bytes
oderbytearray
beispielsweise ein Dokument mit JSON) - docs.python.org/3.6/library/json.htmlAntworten:
Ja,
s
steht für String. Diejson.loads
Funktion verwendet nicht den Dateipfad, sondern den Dateiinhalt als Zeichenfolge. Schauen Sie sich die Dokumentation unter https://docs.python.org/2/library/json.html an !quelle
Ich möchte nur ein einfaches Beispiel zu dem hinzufügen, was jeder erklärt hat.
json.load ()
json.load
kann eine Datei selbst deserialisieren, dh sie akzeptiert einfile
Objekt, z.wird ausgegeben,
Wenn ich
json.loads
stattdessen eine Datei öffne,Ich würde diesen Fehler bekommen:
json.loads ()
json.loads()
String deserialisieren.Um zu verwenden, muss
json.loads
ich den Inhalt der Datei mit derread()
Funktion übergeben, zum BeispielVerwenden
content.read()
mitjson.loads()
Rückgabe Inhalt der Datei,Ausgabe,
Das liegt daran, dass die Art der
content.read()
Zeichenfolge ist, dh<type 'str'>
Wenn ich
json.load()
mit verwendecontent.read()
, erhalte ich Fehler,Gibt,
Jetzt kennen Sie die
json.load
Deserialze-Datei undjson.loads
deserialisieren eine Zeichenfolge.Ein anderes Beispiel,
sys.stdin
Rückfile
Objekt, also wenn ich tueprint(json.load(sys.stdin))
, werde ich tatsächlich json Daten erhalten,Wenn ich verwenden möchte
json.loads()
, würde ichprint(json.loads(sys.stdin.read()))
stattdessen tun .quelle
with open()
undjson.loads()
gibt eine Ausnahme zurück:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
Die Dokumentation ist ziemlich klar: https://docs.python.org/2/library/json.html
So
load
ist es für eine Datei,loads
für einestring
quelle
SCHNELLE ANTWORT (sehr vereinfacht!)
BEISPIELE
quelle
json.dump
/dumps
&json.load
/loads
bogotobogo.com/python/…Die Methode json.load () (ohne "s" in "load") kann eine Datei direkt lesen:
json.loads () -Methode, die nur für Zeichenfolgenargumente verwendet wird .
Hier können wir nach der Verwendung von Lasten () nimmt einen siehe Zeichenfolge (Typ (str)) als Eingabe und Rückkehr Wörterbuch .
quelle
In python3.7.7 ist die Definition von json.load gemäß dem cpython-Quellcode wie folgt :
json.load ruft tatsächlich json.loads auf und verwendet es
fp.read()
als erstes Argument.Wenn Ihr Code also lautet:
Es ist dasselbe, dies zu tun:
Wenn Sie jedoch die aus der Datei
fp.read(10)
gelesenen Bytes als "Gefällt mir" angeben müssen oder die Zeichenfolge / Bytes, die Sie deserialisieren möchten, nicht aus der Datei stammen, sollten Sie json.loads () verwenden.Bei json.loads () werden nicht nur Zeichenfolgen, sondern auch Bytes deserialisiert. Wenn
s
es sich um Bytes oder Bytearray handelt, wird es zuerst als String dekodiert. Sie finden es auch im Quellcode.quelle