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 ein file
Objekt, z.
# open a json file for reading and print content using json.load
with open("/xyz/json_data.json", "r") as content:
print(json.load(content))
wird ausgegeben,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Wenn ich json.loads
stattdessen eine Datei öffne,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Ich würde diesen Fehler bekommen:
TypeError: erwartete Zeichenfolge oder Puffer
json.loads ()
json.loads()
String deserialisieren.
Um zu verwenden, muss json.loads
ich den Inhalt der Datei mit der read()
Funktion übergeben, zum Beispiel
Verwenden content.read()
mit json.loads()
Rückgabe Inhalt der Datei,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Ausgabe,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Das liegt daran, dass die Art der content.read()
Zeichenfolge ist, dh<type 'str'>
Wenn ich json.load()
mit verwende content.read()
, erhalte ich Fehler,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
Gibt,
AttributeError: Das Objekt 'str' hat kein Attribut 'read'.
Jetzt kennen Sie die json.load
Deserialze-Datei und json.loads
deserialisieren eine Zeichenfolge.
Ein anderes Beispiel,
sys.stdin
Rück file
Objekt, also wenn ich tue print(json.load(sys.stdin))
, werde ich tatsächlich json Daten erhalten,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Wenn ich verwenden möchte json.loads()
, würde ich print(json.loads(sys.stdin.read()))
stattdessen tun .
json.loads(s, *)
- Deserializes
(astr
,bytes
oderbytearray
beispielsweise ein Dokument mit JSON) - docs.python.org/3.6/library/json.html