293 votes

Quelle est la différence entre les fonctions json.load () et json.loads ()

En Python, quelle est la différence entre json.load() et json.loads() ?

Je suppose que la fonction load () doit être utilisé avec un objet de fichier (je dois donc d'utiliser un gestionnaire de contexte) , tandis que la fonction des charges () prennent le chemin vers le fichier en tant que chaîne. C'est un peu déroutant.

La lettre " s " dans json.loads() représente-t-elle une chaîne ?

Merci beaucoup pour vos réponses!

270voto

Gijs Points 3952

Oui, s représente une chaîne. La fonction json.loads ne prend pas le chemin du fichier, mais le contenu du fichier sous forme de chaîne. Consultez la documentation sur https://docs.python.org/2/library/json.html !

133voto

Sufiyan Ghori Points 497

Aller juste pour ajouter un simple exemple de ce que tout le monde l'a expliqué,

json.load()

json.load peut désérialiser un fichier lui-même c'est à dire qu'il accepte file objet,

with open("json_data.json", "r") as content:
  print(json.load(content))

seront de sortie,

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

parce qu' content est de type file - je.e, <type 'file'>

Si j'utilise json.loads au lieu de cela,

with open("json_data.json", "r") as content:
  print(json.loads(content))

Je voudrais obtenir cette erreur:

TypeError: chaîne de caractères ou un tampon

json.charges()

json.loads() deserailize chaîne.

à l'aide de content.read() avec json.loads() retour contenu du fichier,

with open("json_data.json", "r") as content:
  print(json.loads(content.read()))

De sortie,

{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}

C'est parce que le type d' content.read() est une chaîne, c'est à dire <type 'str'>

Si j'utilise json.load() avec content.read() j'obtiens l'erreur,

with open("json_data.json", "r") as content:
  print(json.load(content.read()))

Donne,

AttributeError: 'str' object n'a pas d'attribut "lire"

Donc, maintenant vous savez json.load deserialze de fichiers et d' json.loads désérialiser une chaîne de caractères.

Un autre exemple,

sys.stdin rendement file , donc si je n' print(json.load(sys.stdin)), je vais obtenir réel des données json,

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 print(json.loads(sys.stdin.read())) à la place.

34voto

RvdK Points 10793

La Documentation est très claire: https://docs.python.org/2/library/json.html

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

Désérialiser fp (un .lire()-soutenir les fichier comme objet contenant une Document JSON) à un objet Python à l'aide de ce tableau de conversion.

json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

Désérialiser s (un str ou unicode instance contenant un document JSON) pour un objet Python à l'aide de ce tableau de conversion.

Donc, load pour un fichier, loads d'un string

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X