Ich habe viele Projekte gesehen, die simplejson
Module anstelle von json
Modulen aus der Standardbibliothek verwenden. Es gibt auch viele verschiedene simplejson
Module. Warum sollten diese Alternativen anstelle der in der Standardbibliothek verwendet werden?
python
json
simplejson
Lakshman Prasad
quelle
quelle
redefinition of unused 'json'
JSONDecodeError
ist eine Unterklasse vonValueError
Ich muss den anderen Antworten nicht zustimmen: Die eingebaute
json
Bibliothek (in Python 2.7) ist nicht unbedingt langsamer alssimplejson
. Es hat auch nicht diesen nervigen Unicode-Fehler .Hier ist ein einfacher Benchmark:
Und die Ergebnisse auf meinem System (Python 2.7.4, Linux 64-Bit):
Zum Dumping
json
ist schneller alssimplejson
. Zum Laden gehtsimplejson
es schneller.Da ich gerade einen Webdienst aufbaue,
dumps()
ist dies wichtiger - und die Verwendung einer Standardbibliothek wird immer bevorzugt.Auch
cjson
wurde in den letzten 4 Jahren nicht aktualisiert, so dass ich es nicht anfassen würde.quelle
json
(CPython 3.5.0) bei einfachen | komplexen Speicherauszügen 68% | 45% schneller und bei einfachen | komplexen Ladevorgängen ab Versionsimplejson
3.8.0 mit C-Beschleunigungen unter Verwendung Ihres Benchmark-Codes 35% | 17% schneller . Daher würde ich simplejson mit diesem Setup nicht mehr verwenden.json
gewinnt oder ist für alle Tests gleich. In der Tatjson
ist etwas weniger als doppelt so schnell wie der komplexe Real-World-Data-Dumps-Test!Alle diese Antworten sind nicht sehr hilfreich, da sie zeitkritisch sind .
Nachdem ich einige Nachforschungen angestellt hatte, stellte ich fest, dass dies
simplejson
tatsächlich schneller ist als das eingebaute, wenn Sie es auf die neueste Version aktualisieren.pip/easy_install
wollte 2.3.2 auf Ubuntu 12.04 installieren, aber nachdem ich herausgefunden hatte, dass die neuestesimplejson
Version tatsächlich 3.3.0 ist, habe ich sie aktualisiert und die Zeittests erneut durchgeführt.simplejson
ist etwa 3x schneller als das eingebautejson
bei Lastensimplejson
ist etwa 30% schneller als das eingebautejson
auf MüllkippenHaftungsausschluss:
Die obigen Anweisungen sind in Python-2.7.3 und simplejson 3.3.0 (mit c-Beschleunigungen) enthalten. Um sicherzustellen, dass meine Antwort auch nicht zeitkritisch ist, sollten Sie Ihre eigenen Tests durchführen , um dies zu überprüfen, da sie zwischen den Versionen sehr unterschiedlich sind. Es gibt keine einfache Antwort, die nicht zeitkritisch ist.
So erkennen Sie, ob C-Beschleunigungen in simplejson aktiviert sind:
UPDATE: Ich bin kürzlich auf eine Bibliothek namens ujson gestoßen , die ~ 3x schneller arbeitet als
simplejson
einige grundlegende Tests.quelle
Ich habe json, simplejson und cjson verglichen.
http://pastie.org/1507411 :
quelle
Einige Werte werden zwischen simplejson und json unterschiedlich serialisiert.
Insbesondere werden Instanzen von
collections.namedtuple
als Arrays von,json
aber als Objekte von serialisiertsimplejson
. Sie können dieses Verhalten überschreibennamedtuple_as_object=False
, indem Sie an übergebensimplejson.dump
, aber standardmäßig stimmen die Verhaltensweisen nicht überein.quelle
Eine API-Inkompatibilität, die ich mit Python 2.7 gegenüber simplejson 3.3.1 gefunden habe, besteht darin, ob die Ausgabe str- oder unicode-Objekte erzeugt. z.B
vs.
Wenn die Verwendung von simplejson bevorzugt wird, kann dies behoben werden, indem die Argumentzeichenfolge wie in: Unicode erzwungen wird:
Der Zwang erfordert die Kenntnis des ursprünglichen Zeichensatzes, zum Beispiel:
Dies ist das Problem 40, das nicht behoben werden kann
quelle
Ein weiterer Grund, warum Projekte simplejson verwenden, ist, dass der eingebaute json ursprünglich keine C-Beschleunigungen enthielt, sodass der Leistungsunterschied spürbar war.
quelle
Das eingebaute
json
Modul wurde in Python 2.6 aufgenommen. Alle Projekte, die Versionen von Python <2.6 unterstützen, müssen einen Fallback haben. In vielen Fällen ist dies ein Fallbacksimplejson
.quelle
Hier ist ein (inzwischen veralteter) Vergleich der Python-JSON-Bibliotheken:
Vergleichen von JSON-Modulen für Python ( Archivlink )
Unabhängig von den Ergebnissen in diesem Vergleich sollten Sie die Standardbibliothek json verwenden, wenn Sie mit Python 2.6 arbeiten. Und ... könnte genauso gut einfach simplejson verwenden.
quelle
Das simplejson-Modul ist einfach 1,5-mal schneller als json (auf meinem Computer mit simplejson 2.1.1 und Python 2.7 x86).
Wenn Sie möchten, können Sie den Benchmark ausprobieren: http://abral.altervista.org/jsonpickle-bench.zip Auf meinem PC ist simplejson schneller als cPickle. Ich würde gerne auch Ihre Benchmarks kennen!
Wie Coady sagte, besteht der Unterschied zwischen simplejson und json wahrscheinlich darin, dass simplejson _speedups.c enthält. Warum verwenden Python-Entwickler nicht simplejson?
quelle
In python3, wenn Sie eine Reihe von
b'bytes'
, mitjson
Ihnen zu haben ,.decode()
den Inhalt , bevor Sie es laden.simplejson
kümmert sich darum, damit Sie es einfach tun könnensimplejson.loads(byte_string)
.quelle
json
scheint schneller alssimplejson
in beiden Fällen von Ladevorgängen und Dumps in der neuesten VersionGetestete Versionen:
Ergebnisse:
Für Versionen:
json war während des Dump-Betriebs schneller als simplejson, aber beide behielten während des Ladevorgangs die gleiche Geschwindigkeit bei
quelle
Ich bin auf diese Frage gestoßen, als ich simplejson für Python 2.6 installieren wollte. Ich musste den 'object_pairs_hook' von json.load () verwenden, um eine json-Datei als OrderedDict zu laden. Da ich mit neueren Versionen von Python vertraut war, wusste ich nicht, dass das json-Modul für Python 2.6 nicht den 'object_pairs_hook' enthält, daher musste ich simplejson für diesen Zweck installieren. Aus persönlicher Erfahrung verwende ich deshalb simplejson im Gegensatz zum Standard-json-Modul.
quelle