UltraJSON ist ein ultraschneller JSON-Encoder und -Decoder, geschrieben in reinem C mit Bindungen für Python 3.9+.
Mit pip installieren:
python -m pip install ujson
Warnung
Die Architektur von UltraJSON ist grundsätzlich nicht dazu geeignet, Änderungen vorzunehmen, ohne dass das Risiko besteht, dass neue Sicherheitslücken entstehen. Aus diesem Grund wurde diese Bibliothek in einen reinen Wartungsmodus versetzt. Unterstützung für neue Python-Versionen wird hinzugefügt und kritische Fehler und Sicherheitsprobleme werden weiterhin behoben, alle anderen Änderungen werden jedoch abgelehnt. Benutzern wird empfohlen, auf orjson zu migrieren, was sowohl viel schneller ist als auch die Wahrscheinlichkeit geringer ist, dass es in Zukunft zu einer überraschenden Pufferüberlauf-Schwachstelle kommt.
Kann als Ersatz für die meisten anderen JSON-Parser für Python verwendet werden:
>>> import ujson
>>> ujson.dumps([{ " key " : " value " }, 81 , True ])
'[{"key":"value"},81,true]'
>>> ujson.loads( """ [{"key": "value"}, 81, true] """ )
[{'key': 'value'}, 81, True]
Wird verwendet, um eine spezielle Kodierung „unsicherer“ HTML-Zeichen in sicherere Unicode-Sequenzen zu ermöglichen. Der Standardwert ist False
:
>>> ujson.dumps( " <script>John&Doe " , encode_html_chars = True )
'"\u003cscript\u003eJohn\u0026Doe"'
Beschränkt die Ausgabe auf ASCII und maskiert alle erweiterten Zeichen über 127. Der Standardwert ist True
. Wenn Ihr Endformat UTF-8 unterstützt, wird dringend empfohlen, diese Option auf „false“ zu setzen, um Platz zu sparen:
>>> ujson.dumps( " åäö " )
'"\u00e5\u00e4\u00f6"'
>>> ujson.dumps( " åäö " , ensure_ascii = False )
'"åäö"'
Steuert, ob Schrägstriche ( /
) maskiert werden. Der Standardwert ist True
:
>>> ujson.dumps( " https://example.com " )
'"https:\/\/example.com"'
>>> ujson.dumps( " https://example.com " , escape_forward_slashes = False )
'"https://example.com"'
Steuert, ob Einrückung („hübsche Ausgabe“) aktiviert ist. Der Standardwert ist 0
(deaktiviert):
>>> ujson.dumps({ " foo " : " bar " })
'{"foo":"bar"}'
>>> print (ujson.dumps({ " foo " : " bar " }, indent = 4 ))
{
"foo":"bar"
}
UltraJSON -Aufrufe/Sek. im Vergleich zu anderen gängigen JSON-Parsern mit jeweils unten angegebenem Leistungsgewinn.
Linux 5.15.0-1037-azure x86_64 #44-Ubuntu SMP Do 20. April 13:19:31 UTC 2023
ujson | orjson | simplejson | json | |
---|---|---|---|---|
Array mit 256 Doppeln | ||||
kodieren | 18.282 | 79.569 | 5.681 | 5.935 |
dekodieren | 28.765 | 93.283 | 13.844 | 13.367 |
Array mit 256 UTF-8-Strings | ||||
kodieren | 3.457 | 26.437 | 3.630 | 3.653 |
dekodieren | 3.576 | 4.236 | 522 | 1.978 |
Array mit 256 Strings | ||||
kodieren | 44.769 | 125.920 | 21.401 | 23.565 |
dekodieren | 28.518 | 75.043 | 41.496 | 42.221 |
Mittelkomplexes Objekt | ||||
kodieren | 11.672 | 47.659 | 3.913 | 5.729 |
dekodieren | 12.522 | 23.599 | 8.007 | 9.720 |
Array mit 256 wahren Werten | ||||
kodieren | 110.444 | 425.919 | 81.428 | 84.347 |
dekodieren | 203.430 | 318.193 | 146.867 | 156.249 |
Array mit 256 dict{string, int}-Paaren | ||||
kodieren | 14.170 | 72.514 | 3.050 | 7.079 |
dekodieren | 19.116 | 27.542 | 9.374 | 13.713 |
Dict mit 256 Arrays mit 256 dict{string, int}-Paaren | ||||
kodieren | 55 | 282 | 11 | 26 |
dekodieren | 48 | 53 | 27 | 34 |
Dict mit 256 Arrays mit 256 dict{string, int}-Paaren, Ausgabe sortierter Schlüssel | ||||
kodieren | 42 | 8 | 27 | |
Komplexes Objekt | ||||
kodieren | 462 | 397 | 444 | |
dekodieren | 480 | 618 | 177 | 310 |
Die oben genannten Messwerte sind in Anrufen/Sek. angegeben, je größer, desto besser.
Für Benutzer mit besonderen Anforderungen, beispielsweise Paketierer von Linux-Distributionen, werden mehrere Build-Optionen in Form von Umgebungsvariablen bereitgestellt.
Standardmäßig werden Debugsymbole auf Linux-Plattformen entfernt. Wenn Sie diese Umgebungsvariable auf den Wert 1
oder True
setzen, wird dieses Verhalten deaktiviert.
Diese beiden Umgebungsvariablen werden normalerweise zusammen verwendet, etwa so:
export UJSON_BUILD_DC_INCLUDES= ' /usr/include/double-conversion '
export UJSON_BUILD_DC_LIBS= ' -ldouble-conversion '
Benutzer, die eine Verknüpfung mit einer externen gemeinsam genutzten Bibliothek planen, sollten sich der damit verbundenen ABI-Kompatibilitätsanforderungen bewusst sein, wenn sie Systembibliotheken aktualisieren oder kompilierte Räder auf andere Maschinen kopieren.
Ein oder mehrere Verzeichnisse, getrennt durch os.pathsep
(dasselbe wie die Umgebungsvariable PATH
), in denen nach Header-Dateien für double-conversion
gesucht werden soll. Standardmäßig wird die gebündelte Kopie verwendet.
Compiler-Flags, die zum Verknüpfen der double-conversion
erforderlich sind; Standardmäßig wird die gebündelte Kopie verwendet.