402

標準ライブラリのモジュールのsimplejson代わりにモジュールを使用する多くのプロジェクトを見てきました。jsonまた、多くの異なるsimplejsonモジュールがあります。標準ライブラリのものではなく、なぜこれらの代替手段を使用するのでしょうか?

4

13 に答える 13

416

json simplejson、stdlib に追加されます。しかし、json2.6 で追加されたsimplejsonため、より多くの Python バージョン (2.4+) で作業できるという利点があります。

simplejsonまた、Python よりも頻繁に更新されるため、最新バージョンが必要な (または必要な)simplejson場合は、可能であればそれ自体を使用することをお勧めします。

私の意見では、どちらか一方をフォールバックとして使用することをお勧めします。

try:
    import simplejson as json
except ImportError:
    import json
于 2009-04-03T06:59:11.083 に答える
28

これらの回答はすべて、時間に敏感であるため、あまり役に立ちません。

私自身の調査を行った後、最新バージョンに更新し続けるとsimplejson、ビルトインよりも実際に高速であることがわかりました。

pip/easy_installubuntu 12.04に2.3.2をインストールしたかったのですが、最新simplejsonバージョンが実際には3.3.0であることがわかったので、更新して時間テストを再実行しました。

  • simplejsonjsonロード時にビルトインよりも約 3 倍高速です
  • simplejsonjson組み込みの at dumpsよりも約 30% 高速です

免責事項:

上記のステートメントは python-2.7.3 および simplejson 3.3.0 (c のスピードアップあり) にあります。また、私の答えも時間に敏感でないことを確認するには、バージョン間で大きく異なるため、独自のテストを実行して確認する必要があります。時間に敏感でない簡単な答えはありません。

simplejson で C の高速化が有効になっているかどうかを確認する方法:

import simplejson
# If this is True, then c speedups are enabled.
print bool(getattr(simplejson, '_speedups', False))

更新:最近、いくつかの基本的なテストよりも ~3 倍速く実行されるujsonというライブラリに出会いました。simplejson

于 2013-07-24T01:48:06.647 に答える
20

私はjson、simplejson、cjsonのベンチマークを行ってきました。

  • cjson は最速です
  • simplejson は cjson とほぼ同等です
  • json は simplejson よりも約 10 倍遅い

http://pastie.org/1507411 :

$ python test_serialization_speed.py 
--------------------
   Encoding Tests
--------------------
Encoding: 100000 x {'m': 'asdsasdqwqw', 't': 3}
[      json] 1.12385 seconds for 100000 runs. avg: 0.011239ms
[simplejson] 0.44356 seconds for 100000 runs. avg: 0.004436ms
[     cjson] 0.09593 seconds for 100000 runs. avg: 0.000959ms

Encoding: 10000 x {'m': [['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19], ['0', 1, '2', 3, '4', 5, '6', 7, '8', 9, '10', 11, '12', 13, '14', 15, '16', 17, '18', 19]], 't': 3}
[      json] 7.76628 seconds for 10000 runs. avg: 0.776628ms
[simplejson] 0.51179 seconds for 10000 runs. avg: 0.051179ms
[     cjson] 0.44362 seconds for 10000 runs. avg: 0.044362ms

--------------------
   Decoding Tests
--------------------
Decoding: 100000 x {"m": "asdsasdqwqw", "t": 3}
[      json] 3.32861 seconds for 100000 runs. avg: 0.033286ms
[simplejson] 0.37164 seconds for 100000 runs. avg: 0.003716ms
[     cjson] 0.03893 seconds for 100000 runs. avg: 0.000389ms

Decoding: 10000 x {"m": [["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19], ["0", 1, "2", 3, "4", 5, "6", 7, "8", 9, "10", 11, "12", 13, "14", 15, "16", 17, "18", 19]], "t": 3}
[      json] 37.26270 seconds for 10000 runs. avg: 3.726270ms
[simplejson] 0.56643 seconds for 10000 runs. avg: 0.056643ms
[     cjson] 0.33007 seconds for 10000 runs. avg: 0.033007ms
于 2011-01-28T22:39:38.597 に答える
12

一部の値は、simplejson と json の間で異なる方法でシリアル化されます。

特に、 のインスタンスはcollections.namedtupleによって配列としてシリアル化されますjsonが、 ではオブジェクトとしてシリアル化されますsimplejsonnamedtuple_as_object=Falseに渡すことでこの動作をオーバーライドできますsimplejson.dumpが、デフォルトでは動作が一致しません。

>>> import collections, simplejson, json
>>> TupleClass = collections.namedtuple("TupleClass", ("a", "b"))
>>> value = TupleClass(1, 2)
>>> json.dumps(value)
'[1, 2]'
>>> simplejson.dumps(value)
'{"a": 1, "b": 2}'
>>> simplejson.dumps(value, namedtuple_as_object=False)
'[1, 2]'
于 2016-03-18T18:07:05.980 に答える
6

プロジェクトが simplejson を使用するもう 1 つの理由は、ビルトイン json にはもともと C の高速化が含まれていなかったため、パフォーマンスの違いが顕著だったからです。

于 2009-04-03T16:42:58.527 に答える
5

組み込みjsonモジュールは Python 2.6 に含まれています。Python < 2.6 のバージョンをサポートするプロジェクトには、フォールバックが必要です。多くの場合、そのフォールバックはsimplejson.

于 2009-04-03T06:57:44.800 に答える
4

Python json ライブラリの (現在は古い) 比較は次のとおりです。

Python の JSON モジュールの比較(アーカイブ リンク)

この比較の結果に関係なく、Python 2.6 を使用している場合は、標準ライブラリ json を使用する必要があります。そして..それ以外の場合は、単純なjsonを使用することもできます。

于 2009-04-03T07:05:48.883 に答える
2

simplejsonモジュールはjsonよりも単純に1.5倍高速です(私のコンピューターでは、simplejson2.1.1とPython2.7 x86を使用しています)。

必要に応じて、ベンチマークを試すことができます。http: //abral.altervista.org/jsonpickle-bench.zip 私のPCでは、simplejsonはcPickleよりも高速です。あなたのベンチマークも知りたいです!

おそらく、Coadyが言ったように、simplejsonとjsonの違いは、simplejsonに_speedups.cが含まれていることです。では、なぜPython開発者はsimplejsonを使用しないのですか?

于 2010-08-23T01:01:02.170 に答える
2

Python3 では、 の文字列の場合b'bytes'、コンテンツをロードする前にコンテンツ を取得するjson必要があります。がこれを処理するので、 を実行できます。.decode()simplejsonsimplejson.loads(byte_string)

于 2016-06-24T15:16:53.183 に答える
0

Python 2.6 用の simplejson をインストールしようとしていたときに、この質問に出くわしました。json ファイルを OrderedDict としてロードするには、json.load() の「object_pairs_hook」を使用する必要がありました。最近のバージョンの Python に慣れていたので、Python 2.6 の json モジュールに「object_pairs_hook」が含まれていないことに気がつかなかったので、この目的のために simplejson をインストールする必要がありました。個人的な経験から、これが標準のjsonモジュールではなくsimplejsonを使用する理由です。

于 2015-07-07T12:51:06.257 に答える