Saya telah melihat banyak proyek menggunakan simplejson
moduljson
modul dari Perpustakaan Standar. Juga, ada banyak simplejson
modul berbeda . Mengapa menggunakan alternatif ini, alih-alih yang ada di Perpustakaan Standar?
python
json
simplejson
Lakshman Prasad
sumber
sumber
redefinition of unused 'json'
JSONDecodeError
adalah subclass dariValueError
Saya harus tidak setuju dengan jawaban lain: built in
json
library (dengan Python 2.7) belum tentu lebih lambat daripadasimplejson
. Juga tidak memiliki bug unicode yang mengganggu ini .Berikut ini adalah patokan sederhana:
Dan hasilnya di sistem saya (Python 2.7.4, Linux 64-bit):
Untuk dumping,
json
lebih cepat darisimplejson
. Untuk memuat,simplejson
lebih cepat.Karena saya sedang membangun layanan web,
dumps()
lebih penting — dan menggunakan perpustakaan standar selalu lebih disukai.Juga,
cjson
tidak diperbarui dalam 4 tahun terakhir, jadi saya tidak akan menyentuhnya.sumber
json
(CPython 3.5.0) adalah 68% | 45% lebih cepat pada dump sederhana | kompleks dan 35% | 17% pada beban sederhana | kompleks wrtsimplejson
v3.8.0 dengan speedup C menggunakan kode benchmark Anda. Oleh karena itu, saya tidak akan menggunakan simplejson lagi dengan pengaturan ini.json
menang atau sama untuk semua tes. Bahkanjson
sedikit di bawah dua kali lebih cepat dari tes kesedihan data dunia nyata yang kompleks!Semua jawaban ini tidak terlalu membantu karena mereka sensitif terhadap waktu .
Setelah melakukan riset sendiri, saya menemukan bahwa
simplejson
memang lebih cepat daripada builtin, jika Anda tetap memperbaruinya ke versi terbaru.pip/easy_install
ingin menginstal 2.3.2 di ubuntu 12.04, tetapi setelah mengetahuisimplejson
versi terbaru sebenarnya 3.3.0, jadi saya memperbaruinya dan mengulang tes waktu.simplejson
sekitar 3x lebih cepat dari builtinjson
pada bebansimplejson
sekitar 30% lebih cepat dari builtinjson
di tempat pembuanganPenolakan:
Pernyataan di atas adalah dalam python-2.7.3 dan simplejson 3.3.0 (dengan c speedups) Dan untuk memastikan jawaban saya juga tidak peka waktu, Anda harus menjalankan tes Anda sendiri untuk memeriksa karena sangat bervariasi antara versi; tidak ada jawaban mudah yang tidak peka waktu.
Bagaimana cara mengetahui apakah speedup C diaktifkan di simplejson:
UPDATE: Saya baru-baru ini menemukan perpustakaan bernama ujson yang melakukan ~ 3x lebih cepat daripada
simplejson
dengan beberapa tes dasar.sumber
Saya telah melakukan benchmark json, simplejson dan cjson.
http://pastie.org/1507411 :
sumber
Beberapa nilai di-serialisasi secara berbeda antara simplejson dan json.
Khususnya, contoh
collections.namedtuple
serialisasi sebagai array olehjson
tetapi sebagai objek olehsimplejson
. Anda bisa mengubah perilaku ini dengan melewatinamedtuple_as_object=False
untuksimplejson.dump
, tetapi secara default perilaku tidak cocok.sumber
Ketidakcocokan API yang saya temukan, dengan Python 2.7 vs simplejson 3.3.1 adalah apakah output menghasilkan objek str atau unicode. misalnya
vs.
Jika preferensi adalah menggunakan simplejson, maka ini dapat diatasi dengan memaksa string argumen ke unicode, seperti pada:
Paksaan memang membutuhkan mengetahui rangkaian karakter asli, misalnya:
Ini adalah masalah tidak akan diperbaiki 40
sumber
Alasan lain mengapa proyek menggunakan simplejson adalah bahwa builtin json pada awalnya tidak termasuk speedup C-nya, sehingga perbedaan kinerja terlihat.
sumber
json
Modul builtin disertakan dalam Python 2.6. Setiap proyek yang mendukung versi Python <2.6 perlu memiliki cadangan. Dalam banyak kasus, fallback itu adalahsimplejson
.sumber
Berikut ini (sekarang usang) perbandingan perpustakaan Python json:
Membandingkan modul JSON untuk Python ( tautan arsip )
Terlepas dari hasil dalam perbandingan ini, Anda harus menggunakan json pustaka standar jika Anda menggunakan Python 2.6. Dan .. mungkin saja gunakan simplejson sebaliknya.
sumber
Modul simplejson hanya 1,5 kali lebih cepat dari json (Di komputer saya, dengan simplejson 2.1.1 dan Python 2.7 x86).
Jika mau, Anda dapat mencoba patokan: http://abral.altervista.org/jsonpickle-bench.zip Di PC saya simplejson lebih cepat daripada cPickle. Saya ingin tahu juga tolok ukur Anda!
Mungkin, seperti yang dikatakan Coady, perbedaan antara simplejson dan json adalah bahwa simplejson menyertakan _speedups.c. Jadi, mengapa tidak pengembang python menggunakan simplejson?
sumber
Dalam python3, jika Anda string
b'bytes'
, denganjson
Anda harus.decode()
konten sebelum Anda dapat memuatnya.simplejson
mengurus ini sehingga Anda bisa melakukannyasimplejson.loads(byte_string)
.sumber
json
sepertinya lebih cepat darisimplejson
di kedua kasus memuat dan kesedihan di versi terbaruVersi yang diuji:
Hasil:
Untuk versi:
json lebih cepat daripada simplejson selama operasi dump tetapi keduanya mempertahankan kecepatan yang sama selama operasi load
sumber
Saya menemukan pertanyaan ini ketika saya ingin menginstal simplejson untuk Python 2.6. Saya perlu menggunakan 'object_pairs_hook' dari json.load () untuk memuat file json sebagai OrderedDict. Menjadi terbiasa dengan versi Python yang lebih baru, saya tidak menyadari bahwa modul json untuk Python 2.6 tidak termasuk 'object_pairs_hook' jadi saya harus menginstal simplejson untuk tujuan ini. Dari pengalaman pribadi inilah mengapa saya menggunakan simplejson yang bertentangan dengan modul json standar.
sumber