¿Qué es deserializar y serializar en JSON?

Respuestas:

229

JSON es un formato que codifica objetos en una cadena. Serialización significa convertir un objeto en esa cadena , y la deserialización es su operación inversa (convertir cadena -> objeto) .

Al transmitir datos o almacenarlos en un archivo, se requiere que los datos sean cadenas de bytes, pero los objetos complejos rara vez tienen este formato. La serialización puede convertir estos objetos complejos en cadenas de bytes para tal uso. Después de que se transmiten las cadenas de bytes, el receptor tendrá que recuperar el objeto original de la cadena de bytes. Esto se conoce como deserialización.

Digamos que tienes un objeto:

{foo: [1, 4, 7, 10], bar: "baz"}

serializar en JSON lo convertirá en una cadena:

'{"foo":[1,4,7,10],"bar":"baz"}'

que se puede almacenar o enviar por cable a cualquier lugar. El receptor puede deserializar esta cadena para recuperar el objeto original. {foo: [1, 4, 7, 10], bar: "baz"}.

kennytm
fuente
3
@kennytm: estoy tratando de entender cómo enviar cosas por el cable. Independientemente de si uso codificación binaria o uso json, xml o proto buf, los datos siempre deben estar en bytes antes de que puedan enviarse por cable. ¿Es eso cierto?
Nirmal
1
@Nirmal Sí. ___
kennytm
1
Un dispositivo mnemotécnico que uso para recordar la diferencia es que "la serialización convierte los objetos en números de serie"
Janac Meena
1
Entonces, ¿por qué no lo hacemos ?"{foo: [1, 4, 7, 10], bar: "baz"}"
Panoet
2
@EnricoMariaDeAngelis Las propiedades JSON deben estar entre comillas. Es una necesidad: consulte el primer ejemplo en la wiki: en.wikipedia.org/wiki/JSON
Nube
8

En el contexto del almacenamiento de datos, la serialización (o serialización) es el proceso de traducir las estructuras de datos o el estado del objeto a un formato que pueda almacenarse (por ejemplo, en un archivo o memoria intermedia) o transmitirse (por ejemplo, a través de una conexión de red enlace) y reconstruido más tarde. [...]
La operación opuesta, extraer una estructura de datos de una serie de bytes, es la deserialización . De Wikipedia

En Python, la "serialización" no hace nada más que simplemente convertir la estructura de datos dada (por ejemplo, a dict) en su colgante JSON (objeto) válido.

  • Python Truese convertirá en JSON truey el diccionario en sí se encapsulará entre comillas.
  • Puede detectar fácilmente la diferencia entre un diccionario de Python y JSON por sus valores booleanos:
    • Python : True/ False,
    • JSON : true/false
  • El módulo incorporado de Python jsones la forma estándar de hacer la serialización:

Ejemplo de código:

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian",
        "male": True,
    }
}

import json
json_data = json.dumps(data, indent=2) # serialize
restored_data = json.loads(json_data) # deserialize

# serialized json_data now looks like:
# {
#   "president": {
#     "name": "Zaphod Beeblebrox",
#     "species": "Betelgeusian",
#     "male": true
#   }
# }

Fuente: realpython.com

winklerrr
fuente
-3

Explicación de Serializar y Deserializar usando Python

En python, el módulo pickle se usa para la serialización. Entonces, el proceso de serialización se llama decapado en Python. Este módulo está disponible en la biblioteca estándar de Python .

Serialización con pickle

import pickle

#the object to serialize
example_dic={1:"6",2:"2",3:"f"}

#where the bytes after serializing end up at, wb stands for write byte
pickle_out=open("dict.pickle","wb")
#Time to dump
pickle.dump(example_dic,pickle_out)
#whatever you open, you must close
pickle_out.close()

El archivo PICKLE (puede abrirse con un editor de texto como el bloc de notas) contiene esto (datos serializados):

€} q (KX 6qKX 2qKX fqu.

Deserialización con pickle

import pickle

pickle_in=open("dict.pickle","rb")
get_deserialized_data_back=pickle.load(pickle_in)

print(get_deserialized_data_back)

Salida:

{1: '6', 2: '2', 3: 'f'}

Como si
fuente
44
Sin embargo, el usuario preguntó sobre JSON no encurtido. Esto es algo offtopic.
smci
Esta es la pregunta original: ¿Qué es deserializar y serializar en JSON? Usé el módulo de pepinillos de Python para demostrar la idea. He usado una herramienta para explicar una idea. Te estás centrando en la herramienta más que en la idea.
Asif