Ich möchte nur ein einfaches Beispiel zu dem hinzufügen, was jeder erklärt hat.
json.load ()
json.loadkann eine Datei selbst deserialisieren, dh sie akzeptiert ein fileObjekt, 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.loadsstattdessen 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.loadsich 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.loadDeserialze-Datei und json.loadsdeserialisieren eine Zeichenfolge.
Ein anderes Beispiel,
sys.stdinRück fileObjekt, 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,bytesoderbytearraybeispielsweise ein Dokument mit JSON) - docs.python.org/3.6/library/json.html