Je vais juste ajouter un exemple simple à ce que tout le monde a expliqué,
json.load ()
json.load
peut désérialiser un fichier lui-même c'est-à-dire qu'il accepte un file
objet, par exemple,
# 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))
sortira,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Si j'utilise json.loads
pour ouvrir un fichier à la place,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
J'obtiendrais cette erreur:
TypeError: chaîne ou tampon attendu
json.loads ()
json.loads()
désérialiser la chaîne.
Donc, pour utiliser, json.loads
je devrai transmettre le contenu du fichier en utilisant la read()
fonction, par exemple,
utilisation content.read()
avec le json.loads()
contenu de retour du fichier,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Production,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
C'est parce que le type de content.read()
est une chaîne, ie<type 'str'>
Si j'utilise json.load()
avec content.read()
, j'obtiendrai une erreur,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
Donne,
AttributeError: l'objet 'str' n'a pas d'attribut 'read'
Donc, maintenant vous savez json.load
désérialiser le fichier et json.loads
désérialiser une chaîne.
Un autre exemple,
sys.stdin
return file
object, donc si je le fais print(json.load(sys.stdin))
, j'obtiendrai les données json réelles,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Si je veux utiliser json.loads()
, je le ferais à la print(json.loads(sys.stdin.read()))
place.
json.loads(s, *)
- Deserializes
(unstr
,bytes
ou parbytearray
exemple contenant un document JSON) - docs.python.org/3.6/library/json.html