Quelle est la différence entre json.dump() et json.décharges() en python?
J'ai cherché dans cette document officiel pour trouver la différence entre le json.dump() et json.décharges() en python. Il est clair qu'ils sont liés avec le fichier option d'écriture.
Mais qu'est-ce que le détail la différence entre eux et dans quelles situations on a plus d'avantages que d'autres?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas assez bien ajouter quelque chose d'autre que ce que les docs disent. Si vous voulez vider le JSON dans un fichier/socket ou que ce soit, alors vous devriez aller pour
dump()
. Si vous avez besoin seulement comme une chaîne de caractères (pour l'impression, l'analyse ou de quoi que ce soit) puis utilisezdumps()
(vidage de la chaîne)Comme mentionné par Antii de la Haapala dans cette réponse, il ya quelques différences mineures sur le
ensure_ascii
comportement. Cela est principalement dû à la façon dont le sous-jacentwrite()
fonction œuvres, qu'il exploite en morceaux plutôt que de l'ensemble de la chaîne. Vérifiez la réponse pour plus de détails sur cette.json.dump()
json.dumps()
Les fonctions avec un
s
prendre paramètres de la chaîne. Les autres prennent du fichierles ruisseaux.
Une différence notable dans Python 2 est que si vous utilisez
ensure_ascii=False
,dump
va écrire correctement codé en UTF-8 des données dans le fichier (sauf si vous avez utilisé 8-bits des chaînes de caractères avec des caractères étendus ne sont pas en UTF-8):dumps
d'autre part, avecensure_ascii=False
peut produire unstr
ouunicode
juste qu'en fonction des types que vous avez utilisé pour les chaînes:(l'emphase est mienne). Notez que cela peut être encore une
str
instance.Donc vous ne pouvez pas utiliser sa valeur de retour pour sauver la structure dans le fichier sans vérifier qui
le format a été retournée, et éventuellement jouer avec
unicode.encode
.Bien sûr, cela n'est pas valable préoccupation en Python 3, pas plus, car il n'y a plus ce 8-bit Unicode/confusion.
Comme pour
load
vsloads
,load
considère la ensemble fichier à un document JSON, vous ne pouvez donc pas l'utiliser pour lire plusieurs newline limitée JSON documents à partir d'un seul fichier.json.dumps([b'123'])
- >TypeError
.Dans l'utilisation de la mémoire et de la vitesse.
Lorsque vous appelez
jsonstr = json.dumps(mydata)
il crée d'abord une copie complète de vos données dans la mémoire, et seulement alors, vousfile.write(jsonstr)
sur le disque. Donc, ce est une méthode plus rapide mais peut être un problème si vous avez un gros morceau de données à enregistrer.Lorsque vous appelez
json.dump(mydata, file)
- sans "s", les nouvelles de la mémoire n'est pas utilisée, car les données sont sous-évaluées par morceaux. Mais l'ensemble du processus est d'environ 2 fois plus lent.Source: j'ai vérifié le code source de
json.dump()
etjson.dumps()
et également testé les variantes de mesurer le temps avectime.time()
et de regarder l'utilisation de la mémoire dans htop.