En Python, quelle est la différence entre json.load()
et json.loads()
?
Je suppose que la charge () fonction doit être utilisée avec un objet de fichier (je dois donc d'utiliser un gestionnaire de contexte) alors que les charges () fonction prennent le chemin vers le fichier en tant que chaîne. C'est un peu déroutant.
La lettre « s » json.loads()
représente-t-elle une chaîne ?
Merci beaucoup pour vos réponses!
json.loads(s, *)
- Deserializes
(unstr
,bytes
ou parbytearray
exemple contenant un document JSON) - docs.python.org/3.6/library/json.htmlRéponses:
Oui,
s
signifie chaîne. Lajson.loads
fonction ne prend pas le chemin du fichier, mais le contenu du fichier sous forme de chaîne. Regardez la documentation sur https://docs.python.org/2/library/json.html !la source
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 unfile
objet, par exemple,sortira,
Si j'utilise
json.loads
pour ouvrir un fichier à la place,J'obtiendrais cette erreur:
json.loads ()
json.loads()
désérialiser la chaîne.Donc, pour utiliser,
json.loads
je devrai transmettre le contenu du fichier en utilisant laread()
fonction, par exemple,utilisation
content.read()
avec lejson.loads()
contenu de retour du fichier,Production,
C'est parce que le type de
content.read()
est une chaîne, ie<type 'str'>
Si j'utilise
json.load()
aveccontent.read()
, j'obtiendrai une erreur,Donne,
Donc, maintenant vous savez
json.load
désérialiser le fichier etjson.loads
désérialiser une chaîne.Un autre exemple,
sys.stdin
returnfile
object, donc si je le faisprint(json.load(sys.stdin))
, j'obtiendrai les données json réelles,Si je veux utiliser
json.loads()
, je le ferais à laprint(json.loads(sys.stdin.read()))
place.la source
with open()
etjson.loads()
renvoie une exception:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
La documentation est assez claire: https://docs.python.org/2/library/json.html
Il en
load
va de même pour un fichier,loads
pour unstring
la source
RÉPONSE RAPIDE (très simplifiée!)
EXEMPLES
la source
json.dump
/dumps
&json.load
/loads
bogotobogo.com/python/…La méthode json.load () (sans "s" dans "load") peut lire un fichier directement:
json.loads () , qui n'est utilisée que pour les arguments de chaîne .
Ici, nous pouvons voir qu'après avoir utilisé load () prend une chaîne (type (str)) comme dictionnaire d' entrée et de retour .
la source
En python3.7.7, la définition de json.load est la suivante selon le code source cpython :
json.load appelle en fait json.loads et l'utilise
fp.read()
comme premier argument.Donc, si votre code est:
C'est la même chose pour faire ceci:
Mais si vous devez spécifier les octets lisant à partir du fichier comme similaires
fp.read(10)
ou si la chaîne / octets que vous souhaitez désérialiser ne provient pas du fichier, vous devez utiliser json.loads ()Quant à json.loads (), il désérialise non seulement la chaîne mais également les octets. S'il
s
s'agit d'octets ou de bytearray, il sera d'abord décodé en chaîne. Vous pouvez également le trouver dans le code source.la source