Widziałem wiele projektów wykorzystujących simplejson
moduł zamiast json
modułu ze standardowej biblioteki. Istnieje również wiele różnych simplejson
modułów. Dlaczego warto korzystać z tych alternatyw zamiast w Bibliotece standardowej?
python
json
simplejson
Lakshman Prasad
źródło
źródło
redefinition of unused 'json'
JSONDecodeError
jest podklasąValueError
Muszę się nie zgadzać z innymi odpowiedziami: wbudowana
json
biblioteka (w Pythonie 2.7) niekoniecznie jest wolniejsza niżsimplejson
. Nie ma też tego irytującego błędu unicode .Oto prosty punkt odniesienia:
A wyniki w moim systemie (Python 2.7.4, Linux 64-bit):
Do dumpingu
json
jest szybszy niżsimplejson
. Do ładowaniasimplejson
jest szybszy.Ponieważ obecnie buduję usługę internetową,
dumps()
jest to ważniejsze - i zawsze preferowana jest standardowa biblioteka.Ponadto
cjson
nie był aktualizowany w ciągu ostatnich 4 lat, więc nie chciałbym go dotykać.źródło
json
(CPython 3.5.0) jest o 68% | 45% szybszy przy prostych | złożonych zrzutach i 35% | 17% przy prostych | złożonych ładowaniach wrt w wersjisimplejson
3.0.0 z przyspieszeniami C przy użyciu kodu testu porównawczego. Dlatego nie używałbym już simplejson w tej konfiguracji.json
wygrywa lub jest taki sam dla wszystkich testów. W rzeczywistościjson
jest nieco mniej niż dwa razy szybszy od złożonego testu zrzutów danych w świecie rzeczywistym!Wszystkie te odpowiedzi nie są zbyt pomocne, ponieważ są wrażliwe na czas .
Po przeprowadzeniu własnych badań odkryłem, że
simplejson
jest on rzeczywiście szybszy niż wbudowane, jeśli będziesz go aktualizować do najnowszej wersji.pip/easy_install
Chciałem zainstalować 2.3.2 na Ubuntu 12.04, ale po odkryciu, że najnowszasimplejson
wersja jest w rzeczywistości 3.3.0, zaktualizowałem ją i ponownie przeprowadziłem testy czasowe.simplejson
jest około 3 razy szybszy niż wbudowanyjson
przy obciążeniachsimplejson
jest około 30% szybszy niż wbudowanyjson
w zrzutachZrzeczenie się:
Powyższe instrukcje znajdują się w python-2.7.3 i simplejson 3.3.0 (z przyspieszeniami c) I aby upewnić się, że moja odpowiedź również nie jest wrażliwa na czas, powinieneś uruchomić własne testy, aby sprawdzić, ponieważ różnią się one bardzo między wersjami; nie ma łatwej odpowiedzi, która nie byłaby wrażliwa na czas.
Jak stwierdzić, czy przyspieszenia C są włączone w simplejson:
AKTUALIZACJA: Ostatnio natknąłem się na bibliotekę o nazwie ujson, która działa ~ 3 razy szybciej niż w
simplejson
przypadku niektórych podstawowych testów.źródło
Porównywałem testy Json, Simplejson i CJson.
http://pastie.org/1507411 :
źródło
Niektóre wartości są serializowane w różny sposób między simplejson i json.
W szczególności wystąpienia
collections.namedtuple
są szeregowane jako tablice według,json
ale jako obiekty wedługsimplejson
. Możesz zmienić to zachowanie, przechodzącnamedtuple_as_object=False
dosimplejson.dump
, ale domyślnie zachowania się nie zgadzają.źródło
Zgodność API, którą znalazłem w Pythonie 2.7 w porównaniu z simplejson 3.3.1 dotyczy tego, czy dane wyjściowe tworzą obiekty str, czy Unicode. na przykład
vs
Jeśli preferowane jest użycie simplejson, można temu zaradzić, zmuszając ciąg argumentu do Unicode, jak w:
Przymus wymaga znajomości oryginalnego zestawu znaków, na przykład:
To nie naprawi problemu 40
źródło
Innym powodem, dla którego projekty wykorzystują simplejson, jest to, że wbudowany json pierwotnie nie zawierał swoich przyspieszeń C, więc różnica w wydajności była zauważalna.
źródło
Wbudowany
json
moduł został włączony do Pythona 2.6. Wszystkie projekty, które obsługują wersje Pythona <2.6, muszą mieć awarię. W wielu przypadkach jest to awariasimplejson
.źródło
Oto (obecnie nieaktualne) porównanie bibliotek Python Json:
Porównanie modułów JSON dla Pythona ( link do archiwum )
Niezależnie od wyników w tym porównaniu, powinieneś używać standardowej biblioteki json, jeśli korzystasz z Pythona 2.6. I .. równie dobrze może po prostu użyć simplejson inaczej.
źródło
Moduł simplejson jest po prostu 1,5 razy szybszy niż json (na moim komputerze z simplejson 2.1.1 i Python 2.7 x86).
Jeśli chcesz, możesz wypróbować test: http://abral.altervista.org/jsonpickle-bench.zip Na moim komputerze simplejson jest szybszy niż cPickle. Chciałbym poznać również twoje punkty odniesienia!
Prawdopodobnie, jak powiedział Coady, różnica między simplejson i json polega na tym, że simplejson obejmuje _speedups.c. Dlaczego więc programiści python nie używają simplejson?
źródło
W python3, jeśli masz ciąg znaków
b'bytes'
,json
musisz mieć.decode()
zawartość, zanim będziesz mógł ją załadować.simplejson
zajmuje się tym, więc możesz po prostu to zrobićsimplejson.loads(byte_string)
.źródło
json
wydaje się szybszy niżsimplejson
w obu przypadkach obciążeń i zrzutów w najnowszej wersjiTestowane wersje:
Wyniki:
Dla wersji:
json był szybszy niż simplejson podczas operacji zrzutu, ale oba utrzymywały tę samą prędkość podczas operacji ładowania
źródło
Natknąłem się na to pytanie, gdy chciałem zainstalować simplejson dla Pythona 2.6. Musiałem użyć „object_pairs_hook” z json.load (), aby załadować plik json jako OrDERDict. Znając nowsze wersje Pythona, nie zdawałem sobie sprawy, że moduł json dla Pythona 2.6 nie zawiera „haka_obiektu_obiektu”, dlatego w tym celu musiałem zainstalować simplejson. Z własnego doświadczenia dlatego używam simplejson w przeciwieństwie do standardowego modułu json.
źródło