Che cos'è deserializzare e serializzare in JSON?


Risposte:


229

JSON è un formato che codifica gli oggetti in una stringa. La serializzazione significa convertire un oggetto in quella stringa e la deserializzazione è la sua operazione inversa (converti stringa -> oggetto) .

Quando si trasmettono dati o li si archivia in un file, i dati devono essere stringhe di byte, ma raramente gli oggetti complessi sono in questo formato. La serializzazione può convertire questi oggetti complessi in stringhe di byte per tale uso. Dopo la trasmissione delle stringhe di byte, il ricevitore dovrà recuperare l'oggetto originale dalla stringa di byte. Questo è noto come deserializzazione.

Dì, hai un oggetto:

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

la serializzazione in JSON lo convertirà in una stringa:

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

che può essere memorizzato o inviato tramite filo ovunque. Il destinatario può quindi deserializzare questa stringa per recuperare l'oggetto originale. {foo: [1, 4, 7, 10], bar: "baz"}.


3
@kennytm - Sto cercando di avvolgere la mia testa inviando roba sul filo. Indipendentemente dal fatto che io utilizzi la codifica binaria o che utilizzi json, xml o proto buf, i dati devono sempre essere in byte prima di poter essere inviati via cavo. È vero?
Nirmal

1
@Nirmal Sì. ___
kennytm

1
Un dispositivo mnemonico che uso per ricordare la differenza è che "La serializzazione trasforma gli oggetti in numeri seriali"
Janac Meena,

1
Allora perché non lo facciamo"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet il

2
@EnricoMariaDeAngelis Le proprietà JSON devono essere tra virgolette. È una necessità: dai un'occhiata al primo esempio sul wiki: en.wikipedia.org/wiki/JSON
Cloud

8

Nel contesto della memorizzazione dei dati, la serializzazione (o serializzazione) è il processo di traduzione delle strutture di dati o dello stato dell'oggetto in un formato che può essere archiviato (ad esempio, in un file o buffer di memoria) o trasmesso (ad esempio, attraverso una connessione di rete link) e ricostruito in seguito. [...]
L'operazione opposta, che estrae una struttura di dati da una serie di byte, è la deserializzazione . Da Wikipedia

In Python la "serializzazione" non fa altro che convertire la struttura di dati fornita (ad es. A dict) nel suo pendente (oggetto) JSON valido.

  • Python Trueverrà convertito in JSON truee il dizionario stesso verrà quindi incapsulato tra virgolette.
  • Puoi facilmente individuare la differenza tra un dizionario Python e JSON in base ai loro valori booleani:
    • Python : True/ False,
    • JSON : true/false
  • Il modulo integrato Python jsonè il modo standard per eseguire la serializzazione:

Esempio di codice:

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

Fonte: realpython.com


-3

Spiegazione di Serialize e Deserialize usando Python

In python, il modulo pickle viene utilizzato per la serializzazione. Quindi, il processo di serializzazione si chiama decapaggio in Python. Questo modulo è disponibile nella libreria standard Python .

Serializzazione tramite 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()

Il file PICKLE (che può essere aperto da un editor di testo come Blocco note) contiene questo (dati serializzati):

€} q (KX 6qKX 2qKX fqu.

Deserializzazione usando pickle

import pickle

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

print(get_deserialized_data_back)

Produzione:

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


4
L'utente ha chiesto di JSON non sottaceto, però. Questo è un po 'offtopico.
smci,

Questa è la domanda originale: che cosa è deserializzare e serializzare in JSON? Ho usato il modulo pickle di Python per dimostrare l'idea. Ho usato uno strumento per spiegare un'idea. Ti stai concentrando sullo strumento più che sull'idea.
Asif
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.