Блог Рагимова Романа

Производительность библиотек для парсинга JSON в Python

В одном из проектов потребовалось парсить достаточно объемные JSON файлы, отдаваемые API. Примерный размер файла 6 Мб и около 50000 записей. Стандартная библиотека работала достаточно неспешно и я решил сравнить производительность предлагаемых альтернатив.

Тестирование проводилось на виртуальной машине Ubuntu 10.10 32bit. Возможно, на 64 bit результаты будут отличаться. Время выполнения измерялось с помощью timeit.repeat(repeat=10, number=10) с последующим усреднением.

Библиотека parsing parsing + serialization
simplejson 2.162 5.182
cjson 2.395 7.851
ujson 2.416 5.524
py-yajl 3.830 Killed
jsonlib 4.081 10.155
json 5.209 9.764

Как видите, самой быстрой реализацией на данный момент является simplejson. Следом за ним идут cjson и ujson. cjson немного быстрее при парсинге, но значительно проигрывает при сериализации обратно в строку. Все три библиотеки примерно в два раза быстрее стандартного модуля json.

py-yajl, несмотря на заверения авторов обертки, во-первых, оказалась значительно медленнее нативных библиотек, во-вторых, была достаточно сложна в сборке и установке, ну и в-третьих, выдала «killed» в качестве результата теста на парсинг-сериализацию.