UltraJSON é um codificador e decodificador JSON ultrarrápido escrito em C puro com ligações para Python 3.9+.
Instale com pip:
python -m pip install ujson
Aviso
A arquitetura do UltraJSON é fundamentalmente inadequada para fazer alterações sem risco de introduzir novas vulnerabilidades de segurança. Como resultado, esta biblioteca foi colocada em modo somente de manutenção . O suporte para novas versões do Python será adicionado e bugs críticos e problemas de segurança ainda serão corrigidos, mas todas as outras alterações serão rejeitadas. Os usuários são incentivados a migrar para o orjson, que é muito mais rápido e tem menos probabilidade de introduzir uma vulnerabilidade surpresa de buffer overflow no futuro.
Pode ser usado como um substituto para a maioria dos outros analisadores JSON para Python:
>>> import ujson
>>> ujson.dumps([{ " key " : " value " }, 81 , True ])
'[{"key":"value"},81,true]'
>>> ujson.loads( """ [{"key": "value"}, 81, true] """ )
[{'key': 'value'}, 81, True]
Usado para permitir a codificação especial de caracteres HTML "inseguros" em sequências Unicode mais seguras. O padrão é False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
Limita a saída para ASCII e escapa todos os caracteres estendidos acima de 127. O padrão é True
. Se o seu formato final suportar UTF-8, é altamente recomendável definir esta opção como false para economizar espaço:
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
Controla se as barras ( /
) têm escape. O padrão é True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
Controla se o recuo ("saída bonita") está habilitado. O padrão é 0
(desativado):
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
Chamadas UltraJSON /s em comparação com outros analisadores JSON populares com ganho de desempenho especificado abaixo de cada um.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP Qui, 20 de abril 13:19:31 UTC 2023
Ujson | orjson | simplejson | json | |
---|---|---|---|---|
Matriz com 256 duplas | ||||
codificar | 18.282 | 79.569 | 5.681 | 5.935 |
decodificar | 28.765 | 93.283 | 13.844 | 13.367 |
Matriz com 256 strings UTF-8 | ||||
codificar | 3.457 | 26.437 | 3.630 | 3.653 |
decodificar | 3.576 | 4.236 | 522 | 1.978 |
Matriz com 256 strings | ||||
codificar | 44.769 | 125.920 | 21.401 | 23.565 |
decodificar | 28.518 | 75.043 | 41.496 | 42.221 |
Objeto médio complexo | ||||
codificar | 11.672 | 47.659 | 3.913 | 5.729 |
decodificar | 12.522 | 23.599 | 8.007 | 9.720 |
Matriz com 256 valores verdadeiros | ||||
codificar | 110.444 | 425.919 | 81.428 | 84.347 |
decodificar | 203.430 | 318.193 | 146.867 | 156.249 |
Matriz com 256 pares dict{string, int} | ||||
codificar | 14.170 | 72.514 | 3.050 | 7.079 |
decodificar | 19.116 | 27.542 | 9.374 | 13.713 |
Ditado com 256 matrizes com 256 pares dict{string, int} | ||||
codificar | 55 | 282 | 11 | 26 |
decodificar | 48 | 53 | 27 | 34 |
Dict com 256 arrays com 256 pares dict{string, int}, gerando chaves classificadas | ||||
codificar | 42 | 8 | 27 | |
Objeto complexo | ||||
codificar | 462 | 397 | 444 | |
decodificar | 480 | 618 | 177 | 310 |
As métricas acima estão em chamada/s, quanto maior, melhor.
Para aqueles com necessidades específicas, como empacotadores de distribuição Linux, diversas opções de construção são fornecidas na forma de variáveis de ambiente.
Por padrão, os símbolos de depuração são removidos nas plataformas Linux. Definir esta variável de ambiente com um valor 1
ou True
desativa esse comportamento.
Essas duas variáveis de ambiente normalmente são usadas juntas, algo como:
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
Os usuários que planejam vincular-se a uma biblioteca externa compartilhada devem estar cientes dos requisitos de compatibilidade ABI que isso introduz ao atualizar bibliotecas do sistema ou copiar rodas compiladas para outras máquinas.
Um ou mais diretórios, delimitados por os.pathsep
(igual à variável de ambiente PATH
), nos quais procurar arquivos de cabeçalho double-conversion
; o padrão é usar a cópia agrupada.
Flags do compilador necessários para vincular a biblioteca double-conversion
; o padrão é usar a cópia agrupada.