UltraJSON es un codificador y decodificador JSON ultrarrápido escrito en C puro con enlaces para Python 3.9+.
Instalar con pip:
python -m pip install ujson
Advertencia
La arquitectura de UltraJSON es fundamentalmente inadecuada para realizar cambios sin riesgo de introducir nuevas vulnerabilidades de seguridad. Como resultado, esta biblioteca se ha puesto en modo de solo mantenimiento . Se agregará soporte para nuevas versiones de Python y se seguirán solucionando errores críticos y problemas de seguridad, pero se rechazarán todos los demás cambios. Se anima a los usuarios a migrar a orjson, que es mucho más rápido y menos probable que introduzca una vulnerabilidad sorpresa de desbordamiento del búfer en el futuro.
Puede usarse como reemplazo directo de la mayoría de los otros analizadores 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]
Se utiliza para habilitar la codificación especial de caracteres HTML "inseguros" en secuencias Unicode más seguras. El valor predeterminado es False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
Limita la salida a ASCII y escapa a todos los caracteres extendidos superiores a 127. El valor predeterminado es True
. Si su formato final admite UTF-8, se recomienda configurar esta opción en falso para ahorrar espacio:
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
Controla si se escapan las barras diagonales ( /
). El valor predeterminado es True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
Controla si la sangría ("salida bonita") está habilitada. El valor predeterminado es 0
(deshabilitado):
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
Llamadas UltraJSON por segundo en comparación con otros analizadores JSON populares con ganancia de rendimiento especificada debajo de cada uno.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP jueves 20 de abril a las 13:19:31 UTC de 2023
ujson | orjson | simplejson | json | |
---|---|---|---|---|
Matriz con 256 dobles | ||||
codificar | 18.282 | 79.569 | 5.681 | 5.935 |
descodificar | 28.765 | 93.283 | 13.844 | 13.367 |
Matriz con 256 cadenas UTF-8 | ||||
codificar | 3.457 | 26.437 | 3.630 | 3.653 |
descodificar | 3.576 | 4.236 | 522 | 1.978 |
Matriz con 256 cuerdas | ||||
codificar | 44.769 | 125.920 | 21.401 | 23.565 |
descodificar | 28,518 | 75.043 | 41.496 | 42.221 |
Objeto de complejidad media | ||||
codificar | 11.672 | 47.659 | 3,913 | 5.729 |
descodificar | 12,522 | 23,599 | 8.007 | 9.720 |
Matriz con 256 valores verdaderos | ||||
codificar | 110.444 | 425,919 | 81.428 | 84.347 |
descodificar | 203,430 | 318,193 | 146.867 | 156.249 |
Matriz con 256 pares dict{string, int} | ||||
codificar | 14.170 | 72.514 | 3.050 | 7.079 |
descodificar | 19,116 | 27.542 | 9.374 | 13,713 |
Dict con 256 matrices con 256 pares dict{string, int} | ||||
codificar | 55 | 282 | 11 | 26 |
descodificar | 48 | 53 | 27 | 34 |
Dict con 256 matrices con 256 pares dict{string, int}, generando claves ordenadas | ||||
codificar | 42 | 8 | 27 | |
Objeto complejo | ||||
codificar | 462 | 397 | 444 | |
descodificar | 480 | 618 | 177 | 310 |
Las métricas anteriores están en llamadas/seg. Cuanto más grande, mejor.
Para aquellos con necesidades particulares, como los empaquetadores de distribuciones de Linux, se proporcionan varias opciones de compilación en forma de variables de entorno.
De forma predeterminada, los símbolos de depuración se eliminan en las plataformas Linux. Establecer esta variable de entorno con un valor de 1
o True
deshabilita este comportamiento.
Estas dos variables de entorno normalmente se usan juntas, algo como:
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
Los usuarios que planean vincularse a una biblioteca compartida externa deben tener en cuenta los requisitos de compatibilidad ABI que esto introduce al actualizar las bibliotecas del sistema o copiar ruedas compiladas a otras máquinas.
Uno o más directorios, delimitados por os.pathsep
(igual que la variable de entorno PATH
), en los que buscar archivos de encabezado double-conversion
; el valor predeterminado es utilizar la copia incluida.
Se necesitan indicadores del compilador para vincular la biblioteca double-conversion
; el valor predeterminado es utilizar la copia incluida.