O que é desserializar e serializar no JSON?

Respostas:

228

JSON é um formato que codifica objetos em uma sequência. Serialização significa converter um objeto nessa cadeia , e desserialização é sua operação inversa (converter cadeia -> objeto) .

Ao transmitir dados ou armazená-los em um arquivo, é necessário que os dados sejam cadeias de bytes, mas objetos complexos raramente estão nesse formato. A serialização pode converter esses objetos complexos em cadeias de bytes para esse uso. Após a transmissão das cadeias de bytes, o receptor precisará recuperar o objeto original da cadeia de bytes. Isso é conhecido como desserialização.

Digamos que você tenha um objeto:

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

serializar em JSON irá convertê-lo em uma string:

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

que pode ser armazenado ou enviado através de fio para qualquer lugar. O receptor pode desserializar essa string para recuperar o objeto original. {foo: [1, 4, 7, 10], bar: "baz"}.

kennytm
fonte
3
@kennytm - Estou tentando entender como enviar coisas pelo fio. Independentemente de eu usar codificação binária ou usar json, xml ou proto buf - os dados sempre precisam estar em bytes antes de serem enviados pela conexão. Isso é verdade?
Nirmal 31/03
1
@Nirmal Sim. ___
kennytm 31/03
1
Um dispositivo mnemônico eu uso para lembrar a diferença é que "serialização transforma objetos em números de série"
Janac Meena
1
Então, por que não apenas"{foo: [1, 4, 7, 10], bar: "baz"}"
panoret 5/11/19
2
As propriedades JSON do @EnricoMariaDeAngelis devem estar entre aspas. É uma necessidade - confira o primeiro exemplo no wiki: en.wikipedia.org/wiki/JSON
Cloud
8

No contexto do armazenamento de dados, serialização (ou serialização) é o processo de converter estruturas de dados ou estado do objeto em um formato que pode ser armazenado (por exemplo, em um arquivo ou buffer de memória) ou transmitido (por exemplo, através de uma conexão de rede link) e reconstruído mais tarde. [...]
A operação oposta, extraindo uma estrutura de dados de uma série de bytes, é desserialização . Da Wikipedia

No Python, "serialização" nada mais faz do que apenas converter a estrutura de dados fornecida (por exemplo, a dict) em seu pendente JSON válido (objeto).

  • Os Python Trueserão convertidos em JSONs truee o próprio dicionário será encapsulado entre aspas.
  • Você pode identificar facilmente a diferença entre um dicionário Python e JSON por seus valores booleanos:
    • Python : True/ False,
    • JSON : true/false
  • O módulo interno Python jsoné a maneira padrão de fazer serialização:

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

Fonte: realpython.com

winklerrr
fonte
-3

Explicação de serializar e desserializar usando Python

No python, o módulo pickle é usado para serialização. Portanto, o processo de serialização é chamado de decapagem no Python. Este módulo está disponível na biblioteca padrão do Python .

Serialização usando 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()

O arquivo PICKLE (pode ser aberto por um editor de texto como o bloco de notas) contém este (dados serializados):

€} q (KX 6qKX 2qKX fq.

Desserialização usando pickle

import pickle

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

print(get_deserialized_data_back)

Resultado:

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

Até parece
fonte
4
O usuário perguntou sobre JSON não pickle, no entanto. Isso é um tanto offtopic.
smci 14/12/19
Esta é a pergunta original: O que é desserializar e serializar no JSON? Eu usei o módulo pickle do Python para demonstrar a idéia. Eu usei uma ferramenta para explicar uma ideia. Você está focando mais na ferramenta do que na ideia.
Asif