UltraJSON — это сверхбыстрый кодер и декодер JSON, написанный на чистом C с привязками для Python 3.9+.
Установить с помощью пипа:
python -m pip install ujson
Предупреждение
Архитектура UltraJSON принципиально не подходит для внесения изменений без риска появления новых уязвимостей безопасности. В результате эта библиотека была переведена в режим только обслуживания . Будет добавлена поддержка новых версий Python, критические ошибки и проблемы безопасности по-прежнему будут исправлены, но все остальные изменения будут отклонены. Пользователям рекомендуется перейти на orjson, который намного быстрее и с меньшей вероятностью приведет к неожиданному переполнению буфера в будущем.
Может использоваться как замена большинству других парсеров JSON для Python:
>>> import ujson
>>> ujson.dumps([{ " key " : " value " }, 81 , True ])
'[{"key":"value"},81,true]'
>>> ujson.loads( """ [{"key": "value"}, 81, true] """ )
[{'key': 'value'}, 81, True]
Используется для включения специального кодирования «небезопасных» символов HTML в более безопасные последовательности Unicode. По умолчанию — False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
Ограничивает вывод ASCII и экранирует все расширенные символы выше 127. Значение по умолчанию — True
. Если ваш конечный формат поддерживает UTF-8, настоятельно рекомендуется установить для этого параметра значение false для экономии места:
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
Определяет, экранируются ли косые черты ( /
). По умолчанию — True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
Определяет, включены ли отступы («красивый вывод»). По умолчанию 0
(отключено):
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
Вызовов UltraJSON в секунду по сравнению с другими популярными анализаторами JSON, прирост производительности указан ниже каждого из них.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP Четверг, 20 апреля 13:19:31 UTC 2023
Уджсон | Орджсон | простой json | JSON | |
---|---|---|---|---|
Массив с 256 двойниками | ||||
кодировать | 18 282 | 79 569 | 5,681 | 5935 |
декодировать | 28 765 | 93 283 | 13 844 | 13 367 |
Массив с 256 строками UTF-8. | ||||
кодировать | 3,457 | 26 437 | 3630 | 3653 |
декодировать | 3576 | 4236 | 522 | 1978 |
Массив из 256 строк | ||||
кодировать | 44 769 | 125 920 | 21 401 | 23 565 |
декодировать | 28 518 | 75 043 | 41 496 | 42 221 |
Объект средней сложности | ||||
кодировать | 11 672 | 47 659 | 3913 | 5,729 |
декодировать | 12 522 | 23 599 | 8007 | 9,720 |
Массив с 256 истинными значениями | ||||
кодировать | 110 444 | 425 919 | 81 428 | 84 347 |
декодировать | 203 430 | 318 193 | 146 867 | 156 249 |
Массив с 256 парами dict{string, int} | ||||
кодировать | 14 170 | 72 514 | 3050 | 7079 |
декодировать | 19 116 | 27 542 | 9,374 | 13 713 |
Dict с 256 массивами с 256 парами dict{string, int} | ||||
кодировать | 55 | 282 | 11 | 26 |
декодировать | 48 | 53 | 27 | 34 |
Dict с 256 массивами с 256 парами dict{string, int}, выводом отсортированных ключей | ||||
кодировать | 42 | 8 | 27 | |
Сложный объект | ||||
кодировать | 462 | 397 | 444 | |
декодировать | 480 | 618 | 177 | 310 |
Вышеуказанные показатели указаны в количестве вызовов в секунду: чем больше, тем лучше.
Для тех, у кого есть особые потребности, например, для упаковщиков дистрибутива Linux, предусмотрено несколько вариантов сборки в виде переменных среды.
По умолчанию на платформах Linux символы отладки удаляются. Установка для этой переменной среды значения 1
или True
отключает такое поведение.
Эти две переменные среды обычно используются вместе, например:
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
Пользователи, планирующие подключить внешнюю общую библиотеку, должны знать о требованиях совместимости с ABI, которые возникают при обновлении системных библиотек или копировании скомпилированных колес на другие машины.
Один или несколько каталогов, разделенных os.pathsep
(так же, как переменная среды PATH
), в которых нужно искать файлы заголовков double-conversion
; по умолчанию используется связанная копия.
Флаги компилятора, необходимые для связывания библиотеки double-conversion
; по умолчанию используется связанная копия.