Qu'est-ce que la désérialisation et la sérialisation en JSON?


Réponses:


229

JSON est un format qui encode les objets dans une chaîne. La sérialisation signifie convertir un objet en cette chaîne , et la désérialisation est son opération inverse (convertir la chaîne -> objet) .

Lors de la transmission de données ou de leur stockage dans un fichier, les données doivent être des chaînes d'octets, mais les objets complexes sont rarement dans ce format. La sérialisation peut convertir ces objets complexes en chaînes d'octets pour une telle utilisation. Une fois les chaînes d'octets transmises, le récepteur devra récupérer l'objet d'origine à partir de la chaîne d'octets. C'est ce qu'on appelle la désérialisation.

Dites, vous avez un objet:

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

la sérialisation en JSON le convertira en une chaîne:

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

qui peut être stocké ou envoyé par fil n'importe où. Le récepteur peut alors désérialiser cette chaîne pour récupérer l'objet d'origine. {foo: [1, 4, 7, 10], bar: "baz"}.


3
@kennytm - J'essaye de me concentrer sur l'envoi de trucs par fil. Que j'utilise l'encodage binaire ou que j'utilise json, xml ou proto buf - les données doivent toujours être en octets avant de pouvoir être envoyées sur le fil. Est-ce vrai?
Nirmal

1
@Nirmal Oui. ___
kennytm

1
Un moyen mnémotechnique que j'utilise pour me souvenir de la différence est que "la sérialisation transforme les objets en numéros de série"
Janac Meena

1
Alors pourquoi ne pas nous"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet

2
Les propriétés JSON @EnricoMariaDeAngelis doivent être entre guillemets. C'est une nécessité - consultez le premier exemple sur le wiki: en.wikipedia.org/wiki/JSON
Cloud le

8

Dans le contexte du stockage de données, la sérialisation (ou sérialisation) est le processus de traduction des structures de données ou de l'état d'objet dans un format qui peut être stocké (par exemple, dans un fichier ou une mémoire tampon) ou transmis (par exemple, via une connexion réseau. link) et reconstruit plus tard. [...]
L'opération inverse, extraire une structure de données d'une série d'octets, est la désérialisation . De Wikipedia

En Python, la "sérialisation" ne fait rien d'autre que de simplement convertir la structure de données donnée (par exemple a dict) en son pendant (objet) JSON valide.

  • Les Python Trueseront convertis en JSON trueet le dictionnaire lui-même sera ensuite encapsulé entre guillemets.
  • Vous pouvez facilement repérer la différence entre un dictionnaire Python et JSON par leurs valeurs booléennes:
    • Python : True/ False,
    • JSON : true/false
  • Le module intégré Python jsonest le moyen standard de faire la sérialisation:

Exemple de code:

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
#   }
# }

Source: realpython.com


-3

Explication de la sérialisation et de la désérialisation à l'aide de Python

En python, le module pickle est utilisé pour la sérialisation. Ainsi, le processus de sérialisation est appelé pickling en Python. Ce module est disponible dans la bibliothèque standard Python .

Sérialisation à l'aide de 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()

Le fichier PICKLE (peut être ouvert par un éditeur de texte comme le bloc-notes) contient ceci (données sérialisées):

€} q (KX 6qKX 2qKX fqu.

Désérialisation à l'aide de pickle

import pickle

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

print(get_deserialized_data_back)

Production:

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


4
L'utilisateur a posé des questions sur JSON et non sur pickle. C'est quelque peu hors-sujet.
smci

C'est la question originale: qu'est-ce que la désérialisation et la sérialisation en JSON? J'ai utilisé le module pickle de Python pour démontrer l'idée. J'ai utilisé un outil pour expliquer une idée. Vous vous concentrez plus sur l'outil que sur l'idée.
Asif
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.