Що таке десеріалізація та серіалізація в 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"}.


3
@kennytm - я намагаюся обернути голову навколо надсилання матеріалів по дроту. Незалежно від того, використовую я бінарне кодування чи використовую json, xml або proto buf - дані завжди повинні бути в байтах, перш ніж вони можуть бути надіслані по дроту. Це правда?
Nirmal

1
@ Nirmal Так. ___
kennytm

1
Мнемонічний пристрій, який я використовую, щоб запам'ятати різницю, полягає в тому, що "Серіалізація перетворює об'єкти в порядкові номери"
Janac Meena

1
То чому б ми не просто"{foo: [1, 4, 7, 10], bar: "baz"}"
Паноет

2
@EnricoMariaDeAngelis Властивості JSON повинні бути в лапках. Це необхідність - ознайомтеся з першим прикладом на вікі: en.wikipedia.org/wiki/JSON
Хмара

8

У контексті зберігання даних серіалізація (або серіалізація) - це процес перекладу структур даних або стану об'єкта у формат, який може зберігатися (наприклад, у файлі або буфері пам'яті) або передаватися (наприклад, через мережеве з'єднання посилання) та реконструйовано пізніше. [...]
Протилежна операція, витягуючи структуру даних із ряду байтів, - це десеріалізація . З Вікіпедії

У Python "серіалізація" не робить нічого іншого, як просто перетворити дану структуру даних (наприклад, а 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


-3

Пояснення серіалізації та десеріалізації за допомогою Python

У python для серіалізації використовується модуль соління . Отже, процес серіалізації у 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 для демонстрації ідеї. Я використав інструмент для пояснення ідеї. Ви зосереджуєтесь на інструменті більше, ніж на ідеї.
Асиф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.