1. Introducción
En nuestro uso diario Python
, solemos utilizar json
formatos para almacenar algunos datos, sobre todo en web
desarrollo. Sin embargo, Python
la biblioteca nativa json
tiene un rendimiento deficiente y pocas funciones, y solo puede hacer frente a json
los requisitos de conversión de almacenamiento de datos simples y livianos.
json
En este artículo, la biblioteca de terceros que quiero presentarles orjson
, en las pruebas de rendimiento comparativas públicas, tiene de varias a docenas de veces las ventajas de rendimiento de rolling json
, y otras bibliotecas, y tiene ujson
muchas funciones adicionales. vamos a echar un vistazo a sus métodos comunes ~rapidjson
simplejson
Python
2 métodos comunes de orjson
orjson
Es compatible con 3.7
todas 3.10
las versiones de 64 bits . La versión Python
correspondiente que se muestra en este artículo es y la instalación se puede completar usándola directamente . Demostremos los métodos comúnmente utilizados en:orjson
3.7.0
pip install -U orjson
orjson
2.1 Serialización
Similar a la json
biblioteca nativa, podemos usar orjson.dumps()
la serialización Python
de objetos en JSON
datos. Tenga en cuenta que la pequeña diferencia es que orjson
el resultado de la serialización no es str
un tipo sino bytes
un tipo. En el siguiente ejemplo, tenemos un diccionario simple que contiene 10 millones de elementos. La lista está serializado, y la comparación orjson
con json
la biblioteca, que requiere mucho tiempo, es la siguiente:
2.2 Deserialización
El proceso de convertir JSON
datos en Python
objetos se denomina deserialización, que se utiliza orjson.loads()
para operar, aceptar bytes
, str
tipo y otros tipos comunes. Basado en el ejemplo anterior, agregamos un ejemplo de deserialización:
2.3 Opciones de opciones ricas
En orjson
la operación de serialización, option
muchas funciones adicionales se pueden configurar a través de parámetros, comúnmente utilizados son:
-
OPT_INDENT_2
A través de la configuración , podemos agregar un efecto de embellecimiento de sangría de 2 espacios option=orjson.OPT_INDENT_2
al resultado serializado para compensar su falta de parámetros:JSON
indent
-
OPT_OMIT_MICROSECONDS
orjson.dumps()
Puede convertir directamente los objetos de fecha y hora en bibliotecas estándar como Python
Zhong datetime
y otras en cadenas correspondientes, lo que no se puede hacer con time
bibliotecas nativas Sin embargo, a través de la configuración , puede omitir la parte de milisegundos del sufijo del resultado de la conversión:json
option=orjson.OPT_OMIT_MICROSECONDS
-
OPT_NON_STR_KEYS
Cuando hay claves no numéricas en el objeto que debe serializarse, orjson
se generará TypeError
un error de forma predeterminada. En este momento, se requiere configuración option=orjson.OPT_NON_STR_KEYS
para forzar que estas claves se conviertan en tipos de caracteres:
-
OPT_SERIALIZE_NUMPY
orjson
Una de las características importantes de es que puede numpy
convertir objetos complejos que contienen objetos de estructura de datos en JSON
matrices en Compatibilidad, option=orjson.OPT_SERIALIZE_NUMPY
solo coopere:
-
OPT_SERIALIZE_UUID
Además de serializar numpy
objetos automáticamente, orjson
también admite UUID
la conversión de objetos. En orjson 3.0
versiones anteriores, se requería cooperación option=orjson.OPT_SERIALIZE_UUID
, pero 3.X
la versión que se muestra en este artículo no requiere parámetros de configuración adicionales:
-
OPT_SORT_KEYS
Al cooperar con los parámetros option=orjson.OPT_SORT_KEYS
, los resultados serializados se pueden ordenar automáticamente por clave:
-
Combinando múltiples opciones
Cuando su operación de serialización necesita involucrar múltiples option
funciones, puede usar |
operadores para combinar múltiples option
parámetros:
2.4 Agregar estrategias de procesamiento personalizadas para clase de datos y fecha y hora
Cuando necesite serializar objetos que involucran dataclass
estructuras de datos personalizadas, puede cooperar orjson.OPT_PASSTHROUGH_DATACLASS
y luego pasar funciones de procesamiento personalizadas a default
parámetros para lograr una lógica de conversión de datos más libre. Por ejemplo, en el siguiente ejemplo simple, podemos usar Esta función insensibiliza los datos sin procesar :
Del mismo modo, para datetime
los datos de tipo, también podemos cooperar OPT_PASSTHROUGH_DATETIME
con default
funciones personalizadas para realizar la conversión de formato personalizado de fecha:
orjson
Para obtener más funciones, vaya al almacén oficial https://github.com/ijl/orjson
para obtener más información ~