Apa itu deserialize dan serialisasi di JSON?

Jawaban:

229

JSON adalah format yang menyandikan objek dalam string. Serialisasi berarti mengubah objek menjadi string itu , dan deserialisasi adalah operasi kebalikannya (convert string -> object) .

Saat mentransmisikan data atau menyimpannya dalam file, data harus berupa string byte, tetapi objek kompleks jarang dalam format ini. Serialisasi dapat mengubah objek kompleks ini menjadi string byte untuk penggunaan tersebut. Setelah string byte ditransmisikan, penerima harus memulihkan objek asli dari string byte. Ini dikenal sebagai deserialisasi.

Katakanlah, Anda memiliki objek:

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

membuat serial menjadi JSON akan mengubahnya menjadi string:

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

yang dapat disimpan atau dikirim melalui kabel ke mana saja. Penerima kemudian dapat membatalkan deserialisasi string ini untuk mendapatkan kembali objek aslinya. {foo: [1, 4, 7, 10], bar: "baz"}.

kennytm
sumber
3
@kennytm - Saya mencoba membungkus kepala saya mengirim barang melalui kawat. Terlepas dari apakah saya menggunakan pengkodean biner atau menggunakan json, xml atau proto buf - data selalu harus dalam byte sebelum mereka dapat dikirim melalui kabel. Benarkah itu?
Nirmal
1
@Nirmal Ya. ___
kennytm
1
Perangkat mnemonik yang saya gunakan untuk mengingat perbedaannya adalah "Serialisasi mengubah objek menjadi nomor seri"
Janac Meena
1
Jadi mengapa kita tidak"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet
2
@EnricoMariaDeAngelis JSON Properties harus dalam tanda kutip. Ini adalah suatu keharusan - lihat contoh pertama di wiki: en.wikipedia.org/wiki/JSON
Cloud
8

Dalam konteks penyimpanan data, serialisasi (atau serialisasi) adalah proses menerjemahkan struktur data atau keadaan objek ke dalam format yang dapat disimpan (misalnya, dalam buffer file atau memori) atau ditransmisikan (misalnya, melalui koneksi jaringan tautan) dan direkonstruksi kemudian. [...]
Operasi yang berlawanan, mengekstraksi struktur data dari serangkaian byte, adalah deserialisasi . Dari Wikipedia

Dalam Python "serialisasi" tidak melakukan apa pun selain hanya mengubah struktur data yang diberikan (misalnya a dict) menjadi liontin JSON (objek) yang valid.

  • Python Trueakan dikonversi ke JSON truedan kamus itu sendiri kemudian akan dienkapsulasi dalam tanda kutip.
  • Anda dapat dengan mudah melihat perbedaan antara kamus Python dan JSON dengan nilai Booleannya:
    • Python : True/ False,
    • JSON : true/false
  • Modul Python builtin jsonadalah cara standar untuk melakukan serialisasi:

Contoh kode:

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

Sumber: realpython.com

winklerrr
sumber
-3

Penjelasan Serialize dan Deserialize menggunakan Python

Dalam python, modul acar digunakan untuk serialisasi. Jadi, proses serialisasi disebut pengawetan dengan Python. Modul ini tersedia di pustaka standar Python .

Serialisasi menggunakan acar

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

File PICKLE (dapat dibuka oleh editor teks seperti notepad) berisi ini (data serial):

€} q (KX 6qKX 2qKX fqu.

Deserialisasi menggunakan acar

import pickle

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

print(get_deserialized_data_back)

Keluaran:

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

Seolah-olah
sumber
4
Pengguna bertanya tentang JSON tidak acar. Ini agak offtopic.
smci
Ini adalah pertanyaan asli: Apa deserialize dan serialisasi di JSON? Saya menggunakan modul acar Python untuk menunjukkan ide itu. Saya telah menggunakan alat untuk menjelaskan sebuah ide. Anda lebih fokus pada alat daripada ide.
Asif