Что такое десериализация и сериализация в JSON?

Ответы:

229

JSON - это формат, который кодирует объекты в строку. Сериализация означает преобразование объекта в эту строку , а десериализация - это обратная операция (преобразование строки -> объект) .

При передаче данных или хранении их в файле данные должны быть байтовыми строками, но сложные объекты редко бывают в этом формате. Сериализация может преобразовывать эти сложные объекты в байтовые строки для такого использования. После того, как байтовые строки будут переданы, получатель должен будет восстановить исходный объект из байтовой строки. Это известно как десериализация.

Скажем, у вас есть объект:

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

сериализация в JSON преобразует его в строку:

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

которые можно хранить или отправлять по телеграфу куда угодно. Затем получатель может десериализовать эту строку, чтобы вернуть исходный объект. {foo: [1, 4, 7, 10], bar: "baz"},

kennytm
источник
3
@kennytm - Я пытаюсь осознать, что отправляю сообщения по сети. Независимо от того, использую ли я двоичное кодирование или использую json, xml или proto buf - данные всегда должны быть в байтах, прежде чем их можно будет отправить по сети. Это правда?
Nirmal
1
@ Нирмал Да. ___
kennytm
1
Я использую мнемонический прием, чтобы запомнить разницу: «Сериализация превращает объекты в серийные номера»
Янак Мина
1
Так почему бы нам просто не"{foo: [1, 4, 7, 10], bar: "baz"}"
Panoet
2
Свойства JSON @EnricoMariaDeAngelis должны быть заключены в кавычки. Это необходимость - посмотрите первый пример на вики: en.wikipedia.org/wiki/JSON
Cloud
8

В контексте хранения данных сериализация (или сериализация) - это процесс преобразования структур данных или состояния объекта в формат, который может быть сохранен (например, в файле или буфере памяти) или передан (например, через сетевое соединение). ссылка) и реконструирован позже. [...]
Противоположная операция, извлечение структуры данных из серии байтов, - это десериализация .Из Википедии

В Python «сериализация» не делает ничего, кроме преобразования заданной структуры данных (например, a dict) в ее действительный кулон (объект) JSON.

  • Python Trueбудет преобразован в JSON, trueа сам словарь будет заключен в кавычки.
  • Вы можете легко заметить разницу между словарем Python и JSON по их логическим значениям:
    • Python : True/ False,
    • JSON : true/false
  • Встроенный модуль Python json- это стандартный способ сериализации:

Пример кода:

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

Источник: realpython.com

winklerrr
источник
-3

Объяснение сериализации и десериализации с использованием Python

В python для сериализации используется модуль pickle . Итак, процесс сериализации в Python называется травлением . Этот модуль доступен в стандартной библиотеке Python .

Сериализация с использованием рассола

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

Файл PICKLE (может быть открыт текстовым редактором, например блокнотом) содержит это (сериализованные данные):

€} q (KX 6qKX 2qKX fqu.

Десериализация с использованием рассола

import pickle

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

print(get_deserialized_data_back)

Вывод:

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

Как будто
источник
4
Однако пользователь спросил о JSON, а не о рассоле. Это несколько оффтоп.
smci
Это оригинальный вопрос: что такое десериализация и сериализация в JSON? Я использовал модуль Python pickle, чтобы продемонстрировать идею. Я использовал инструмент, чтобы объяснить идею. Вы концентрируетесь на инструменте больше, чем на идее.
Asif