Я видел много проектов, использующих simplejson
модуль вместо json
модуля из стандартной библиотеки. Также есть много разных simplejson
модулей. Зачем использовать эти альтернативы, вместо того, что в стандартной библиотеке?
python
json
simplejson
Лакшман Прасад
источник
источник
redefinition of unused 'json'
JSONDecodeError
является подклассомValueError
Я должен не согласиться с другими ответами: встроенная
json
библиотека (в Python 2.7) не обязательно медленнее, чемsimplejson
. У этого также нет этой раздражающей ошибки юникода .Вот простой тест:
И результаты на моей системе (Python 2.7.4, Linux 64-bit):
Для сброса,
json
быстрее, чемsimplejson
. Для загрузки,simplejson
быстрее.Поскольку в настоящее время я занимаюсь созданием веб-службы,
dumps()
это важнее, и всегда предпочтительнее использовать стандартную библиотеку.Кроме того,
cjson
не обновлялся в течение последних 4 лет, поэтому я бы не стал его трогать.источник
json
(CPython 3.5.0) на 68% | 45% быстрее на простых | сложных дампах и на 35% | 17% на простых | сложных нагрузках поsimplejson
сравнению с v3.8.0 с ускорением C с использованием кода вашего теста. Поэтому я бы больше не использовал simplejson с этой настройкой.json
выиграл или то же самое для всех тестов. На самом делеjson
это чуть меньше, чем вдвое быстрее, чем сложный тест на создание реальных дампов данных!Все эти ответы не очень полезны, потому что они чувствительны ко времени .
Проведя собственное исследование, я обнаружил, что
simplejson
он действительно быстрее встроенного, если вы обновите его до последней версии.pip/easy_install
хотел установить 2.3.2 на ubuntu 12.04, но после того, как узнал, что последняяsimplejson
версия на самом деле - 3.3.0, я обновил ее и перезапустил время тестирования.simplejson
примерно в 3 раза быстрее, чем встроенныйjson
при нагрузкеsimplejson
примерно на 30% быстрее, чем встроенныйjson
на свалкахОтказ от ответственности:
Вышеприведенные операторы написаны на python-2.7.3 и simplejson 3.3.0 (с ускорением c). Чтобы убедиться, что мой ответ также не чувствителен ко времени, вы должны запустить свои собственные тесты, чтобы проверить, так как он сильно варьируется между версиями; нет простого ответа, который не чувствителен ко времени.
Как узнать, включены ли ускорения C в simplejson:
ОБНОВЛЕНИЕ: я недавно столкнулся с библиотекой под названием ujson, которая работает в ~ 3 раза быстрее, чем
simplejson
с некоторыми базовыми тестами.источник
Я тестировал json, simplejson и cjson.
http://pastie.org/1507411 :
источник
Некоторые значения по-разному сериализуются между simplejson и json.
Примечательно, что экземпляры
collections.namedtuple
сериализуются как массивы,json
но как объектыsimplejson
. Вы можете переопределить это поведение, передавnamedtuple_as_object=False
вsimplejson.dump
, но по умолчанию, поведение не совпадает.источник
Я обнаружил, что несовместимость API с Python 2.7 против simplejson 3.3.1 заключается в том, создает ли выходные данные объекты str или unicode. например
против
Если предпочтение состоит в том, чтобы использовать simplejson, то это можно устранить путем принудительной установки аргументной строки в unicode, например:
Принуждение требует знания оригинальной кодировки, например:
Это не решит проблему 40
источник
Еще одна причина, по которой проекты используют simplejson, заключается в том, что встроенный json изначально не включал в себя ускорения C, поэтому разница в производительности была заметной.
источник
Встроенный
json
модуль включен в Python 2.6. Любые проекты, которые поддерживают версии Python <2.6, должны иметь запасной вариант. Во многих случаях этот запасной вариант естьsimplejson
.источник
Вот (ныне устаревшее) сравнение библиотек Python json:
Сравнение модулей JSON для Python ( ссылка на архив )
Независимо от результатов этого сравнения вы должны использовать стандартную библиотеку json, если вы используете Python 2.6. И ... в противном случае можно просто использовать simplejson.
источник
Модуль simplejson просто в 1,5 раза быстрее, чем json (на моем компьютере с simplejson 2.1.1 и Python 2.7 x86).
Если вы хотите, вы можете попробовать тест: http://abral.altervista.org/jsonpickle-bench.zip На моем ПК simplejson работает быстрее, чем cPickle. Я хотел бы знать также ваши ориентиры!
Вероятно, как сказал Коуди, разница между simplejson и json заключается в том, что simplejson включает _speedups.c. Итак, почему разработчики Python не используют simplejson?
источник
В python3, если у вас есть строка
b'bytes'
,json
вы должны.decode()
загрузить содержимое, прежде чем сможете его загрузить.simplejson
заботится об этом, так что вы можете просто сделатьsimplejson.loads(byte_string)
.источник
json
кажется быстрее, чемsimplejson
в обоих случаях загрузки и выгрузки в последней версииПротестированные версии:
Результаты:
Для версий:
json был быстрее, чем simplejson при работе с дампами, но оба поддерживали одинаковую скорость при работе с нагрузками
источник
Я столкнулся с этим вопросом, когда искал возможность установить simplejson для Python 2.6. Мне нужно было использовать 'object_pairs_hook' из json.load (), чтобы загрузить файл json как OrderedDict. Будучи знаком с более поздними версиями Python, я не осознавал, что модуль json для Python 2.6 не содержит 'object_pairs_hook', поэтому мне пришлось установить simplejson для этой цели. Исходя из личного опыта, именно поэтому я использую simplejson, а не стандартный модуль json.
источник