J'ai vu de nombreux projets utilisant le simplejson
module au lieu du json
module de la bibliothèque standard. En outre, il existe de nombreux simplejson
modules différents . Pourquoi utiliser ces alternatives au lieu de celle de la bibliothèque standard?
python
json
simplejson
Lakshman Prasad
la source
la source
redefinition of unused 'json'
JSONDecodeError
est une sous-classe deValueError
Je dois être en désaccord avec les autres réponses: la
json
bibliothèque intégrée (en Python 2.7) n'est pas nécessairement plus lente quesimplejson
. Il n'a pas non plus ce bug unicode ennuyeux .Voici une référence simple:
Et les résultats sur mon système (Python 2.7.4, Linux 64 bits):
Pour le dumping,
json
est plus rapide quesimplejson
. Pour le chargement,simplejson
c'est plus rapide.Étant donné que je suis en train de créer un service Web,
dumps()
c'est plus important et l'utilisation d'une bibliothèque standard est toujours préférable.De plus,
cjson
n'a pas été mis à jour au cours des 4 dernières années, donc je n'y toucherais pas.la source
json
(CPython 3.5.0) est 68% | 45% plus rapide sur les vidages simples | complexes et 35% | 17% sur les charges simples | complexes par rapport àsimplejson
v3.8.0 avec des accélérations C en utilisant votre code de référence. Par conséquent, je n'utiliserais plus simplejson avec cette configuration.json
gagne ou est le même pour tous les tests. En fait,json
c'est un peu moins de deux fois plus rapide que le test complexe de décharges de données du monde réel!Toutes ces réponses ne sont pas très utiles car elles sont sensibles au temps .
Après avoir fait mes propres recherches, j'ai trouvé que
simplejson
c'était en effet plus rapide que le programme intégré, si vous le maintenez à jour avec la dernière version.pip/easy_install
simplejson
Je voulais installer 2.3.2 sur Ubuntu 12.04, mais après avoir découvert que la dernière version est en fait la 3.3.0, je l'ai donc mise à jour et relancé les tests de temps.simplejson
est environ 3 fois plus rapide que la fonction intégréejson
à des chargessimplejson
est environ 30% plus rapide que la fonction intégréejson
dans les déchargesAvertissement:
Les énoncés ci - dessus sont en python-2.7.3 et 3.3.0 simplejson (avec c speedups) Et pour vous assurer que ma réponse n'est pas sensible au temps, vous devriez également exécuter vos propres tests pour vérifier car il varie tellement entre les versions; il n'y a pas de réponse facile qui ne soit pas sensible au temps.
Comment savoir si les accélérations C sont activées dans simplejson:
MISE À JOUR: J'ai récemment rencontré une bibliothèque appelée ujson qui fonctionne environ 3 fois plus rapidement
simplejson
qu'avec certains tests de base.la source
J'ai comparé json, simplejson et cjson.
http://pastie.org/1507411 :
la source
Certaines valeurs sont sérialisées différemment entre simplejson et json.
Notamment, les instances de
collections.namedtuple
sont sérialisées en tant que tableaux parjson
mais en tant qu'objets parsimplejson
. Vous pouvez remplacer ce comportement en passantnamedtuple_as_object=False
àsimplejson.dump
, mais par défaut, les comportements ne correspondent pas.la source
Une incompatibilité d'API que j'ai trouvée avec Python 2.7 vs simplejson 3.3.1 est de savoir si la sortie produit des objets str ou unicode. par exemple
contre
Si la préférence est d'utiliser simplejson, cela peut être résolu en contraignant la chaîne d'argument à unicode, comme dans:
La contrainte nécessite de connaître le jeu de caractères d'origine, par exemple:
Ceci ne résoudra pas le problème 40
la source
Une autre raison pour laquelle les projets utilisent simplejson est que le json intégré n'incluait pas à l'origine ses accélérations C, de sorte que la différence de performances était notable.
la source
Le
json
module intégré a été inclus dans Python 2.6. Tous les projets qui prennent en charge les versions de Python <2.6 doivent avoir une solution de secours. Dans de nombreux cas, cette solution de rechange estsimplejson
.la source
Voici (une comparaison désormais obsolète) des bibliothèques json Python:
Comparaison des modules JSON pour Python ( lien d'archive )
Quels que soient les résultats de cette comparaison, vous devez utiliser la bibliothèque standard json si vous êtes sur Python 2.6. Et .. pourrait tout aussi bien utiliser simplejson autrement.
la source
Le module simplejson est tout simplement 1,5 fois plus rapide que json (sur mon ordinateur, avec simplejson 2.1.1 et Python 2.7 x86).
Si vous le souhaitez, vous pouvez essayer la référence: http://abral.altervista.org/jsonpickle-bench.zip Sur mon PC simplejson est plus rapide que cPickle. J'aimerais aussi connaître vos repères!
Probablement, comme l'a dit Coady, la différence entre simplejson et json est que simplejson inclut _speedups.c. Alors, pourquoi les développeurs de python n'utilisent-ils pas simplejson?
la source
En python3, si vous une chaîne de
b'bytes'
,json
vous devez avoir.decode()
le contenu avant de pouvoir le charger.simplejson
s'occupe de cela pour que vous puissiez le fairesimplejson.loads(byte_string)
.la source
json
semble plus rapide quesimplejson
dans les deux cas de charges et de vidages dans la dernière versionVersions testées:
Résultats:
Pour les versions:
json était plus rapide que simplejson pendant le fonctionnement des décharges mais les deux ont maintenu la même vitesse pendant les opérations de chargement
la source
Je suis tombé sur cette question alors que je cherchais à installer simplejson pour Python 2.6. J'avais besoin d'utiliser le 'object_pairs_hook' de json.load () afin de charger un fichier json en tant que OrderedDict. Connaissant les versions plus récentes de Python, je ne savais pas que le module json pour Python 2.6 n'inclut pas le 'object_pairs_hook', j'ai donc dû installer simplejson à cet effet. Par expérience personnelle, c'est pourquoi j'utilise simplejson par opposition au module json standard.
la source