Aggiungerò solo un semplice esempio di ciò che tutti hanno spiegato,
json.load ()
json.load
può deserializzare un file stesso, ovvero accetta un file
oggetto, ad esempio,
# 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))
uscirà,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Se invece utilizzo json.loads
un file,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Vorrei ottenere questo errore:
TypeError: stringa o buffer previsti
json.loads ()
json.loads()
deserializzare la stringa.
Quindi per poter usare json.loads
dovrò passare il contenuto del file usando la read()
funzione, ad esempio
utilizzando content.read()
con il json.loads()
contenuto di ritorno del file,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Produzione,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Questo perché il tipo di content.read()
è stringa, cioè<type 'str'>
Se lo utilizzo json.load()
con content.read()
, visualizzerò un errore,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
dà,
AttributeError: l'oggetto 'str' non ha attributi 'read'
Quindi, ora conosci il json.load
file json.loads
deserialze e deserializza una stringa.
Un altro esempio,
sys.stdin
restituire file
oggetto, quindi se lo faccio print(json.load(sys.stdin))
, otterrò dati json effettivi,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Se voglio usare json.loads()
, lo farei print(json.loads(sys.stdin.read()))
invece.
json.loads(s, *)
- Deserializzas
(astr
,bytes
obytearray
istanza contenente un documento JSON) - docs.python.org/3.6/library/json.html