UltraJSON est un encodeur et décodeur JSON ultra rapide écrit en C pur avec des liaisons pour Python 3.9+.
Installer avec pip :
python -m pip install ujson
Avertissement
L'architecture d'UltraJSON est fondamentalement inadaptée pour apporter des modifications sans risque d'introduire de nouvelles failles de sécurité. En conséquence, cette bibliothèque a été mise en mode maintenance uniquement . La prise en charge des nouvelles versions de Python sera ajoutée et les bogues critiques et les problèmes de sécurité seront toujours corrigés, mais toutes les autres modifications seront rejetées. Les utilisateurs sont encouragés à migrer vers orjson, qui est à la fois beaucoup plus rapide et moins susceptible d'introduire une vulnérabilité surprise de débordement de tampon à l'avenir.
Peut être utilisé en remplacement de la plupart des autres analyseurs JSON pour Python :
>>> import ujson
>>> ujson.dumps([{ " key " : " value " }, 81 , True ])
'[{"key":"value"},81,true]'
>>> ujson.loads( """ [{"key": "value"}, 81, true] """ )
[{'key': 'value'}, 81, True]
Utilisé pour activer un codage spécial de caractères HTML « dangereux » en séquences Unicode plus sûres. La valeur par défaut est False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
Limite la sortie à ASCII et échappe tous les caractères étendus au-dessus de 127. La valeur par défaut est True
. Si votre format final prend en charge UTF-8, il est fortement recommandé de définir cette option sur false pour économiser de l'espace :
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
Contrôle si les barres obliques ( /
) sont échappées. La valeur par défaut est True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
Contrôle si l'indentation (« jolie sortie ») est activée. La valeur par défaut est 0
(désactivée) :
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
Appels UltraJSON /s par rapport à d'autres analyseurs JSON populaires avec un gain de performances spécifié en dessous de chacun.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP jeu. 20 avril 13:19:31 UTC 2023
Ujson | orjson | simplejson | json | |
---|---|---|---|---|
Tableau avec 256 doubles | ||||
encoder | 18 282 | 79 569 | 5 681 | 5 935 |
décoder | 28 765 | 93 283 | 13 844 | 13 367 |
Tableau avec 256 chaînes UTF-8 | ||||
encoder | 3 457 | 26 437 | 3 630 | 3 653 |
décoder | 3 576 | 4 236 | 522 | 1 978 |
Tableau avec 256 chaînes | ||||
encoder | 44 769 | 125 920 | 21 401 | 23 565 |
décoder | 28 518 | 75 043 | 41 496 | 42 221 |
Objet moyennement complexe | ||||
encoder | 11 672 | 47 659 | 3 913 | 5 729 |
décoder | 12 522 | 23 599 | 8 007 | 9 720 |
Tableau avec 256 valeurs vraies | ||||
encoder | 110 444 | 425 919 | 81 428 | 84 347 |
décoder | 203 430 | 318 193 | 146 867 | 156 249 |
Tableau avec 256 paires dict{string, int} | ||||
encoder | 14 170 | 72 514 | 3 050 | 7 079 |
décoder | 19 116 | 27 542 | 9 374 | 13 713 |
Dict avec 256 tableaux avec 256 paires dict{string, int} | ||||
encoder | 55 | 282 | 11 | 26 |
décoder | 48 | 53 | 27 | 34 |
Dict avec 256 tableaux avec 256 paires dict{string, int}, produisant des clés triées | ||||
encoder | 42 | 8 | 27 | |
Objet complexe | ||||
encoder | 462 | 397 | 444 | |
décoder | 480 | 618 | 177 | 310 |
Les métriques ci-dessus sont en appel/s, plus c'est grand, mieux c'est.
Pour ceux qui ont des besoins particuliers, comme les conditionneurs de distribution Linux, plusieurs options de construction sont fournies sous forme de variables d'environnement.
Par défaut, les symboles de débogage sont supprimés sur les plateformes Linux. La définition de cette variable d'environnement avec une valeur de 1
ou True
désactive ce comportement.
Ces deux variables d'environnement sont généralement utilisées ensemble, quelque chose comme :
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
Les utilisateurs qui envisagent de se connecter à une bibliothèque partagée externe doivent être conscients des exigences de compatibilité ABI que cela introduit lors de la mise à niveau des bibliothèques système ou de la copie de roues compilées sur d'autres machines.
Un ou plusieurs répertoires, délimités par os.pathsep
(identique à la variable d'environnement PATH
), dans lesquels rechercher les fichiers d'en-tête double-conversion
; la valeur par défaut consiste à utiliser la copie groupée.
Indicateurs du compilateur nécessaires pour lier la bibliothèque double-conversion
; la valeur par défaut consiste à utiliser la copie groupée.