deserialize และ serialize ใน JSON คืออะไร?


คำตอบ:


229

JSON เป็นรูปแบบที่เข้ารหัสออบเจ็กต์ในสตริง อันดับวิธีการแปลงวัตถุเป็นสตริงที่และdeserialization คือการดำเนินการผกผัน (แปลงสตริง -> วัตถุ)

เมื่อส่งข้อมูลหรือจัดเก็บข้อมูลในไฟล์ข้อมูลจะต้องเป็นสตริงไบต์ แต่อ็อบเจ็กต์ที่ซับซ้อนแทบจะไม่มีในรูปแบบนี้ การทำให้เป็นอนุกรมสามารถแปลงวัตถุที่ซับซ้อนเหล่านี้เป็นสตริงไบต์สำหรับการใช้งานดังกล่าว หลังจากส่งสตริงไบต์แล้วผู้รับจะต้องกู้คืนอ็อบเจ็กต์ดั้งเดิมจากสตริงไบต์ สิ่งนี้เรียกว่า deserialization

พูดว่าคุณมีวัตถุ:

{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
อุปกรณ์ช่วยในการจำที่ฉันใช้เพื่อจำความแตกต่างคือ "Serialization เปลี่ยนวัตถุให้เป็นหมายเลขซีเรียล"
Janac Meena

1
แล้วทำไมเราไม่ลอง"{foo: [1, 4, 7, 10], bar: "baz"}"
พาโนรามา

2
@EnricoMariaDeAngelis JSON คุณสมบัติต้องอยู่ในเครื่องหมายคำพูด จำเป็น - ดูตัวอย่างแรกใน wiki: en.wikipedia.org/wiki/JSON
Cloud

8

ในบริบทของการจัดเก็บข้อมูลการทำให้เป็นอนุกรม (หรือการทำให้เป็นอนุกรม) คือกระบวนการแปลโครงสร้างข้อมูลหรือสถานะวัตถุให้อยู่ในรูปแบบที่สามารถจัดเก็บได้ (ตัวอย่างเช่นในไฟล์หรือบัฟเฟอร์หน่วยความจำ) หรือส่งผ่าน (ตัวอย่างเช่นการเชื่อมต่อเครือข่าย ลิงค์) และสร้างขึ้นใหม่ในภายหลัง [... ]
การดำเนินการที่ตรงกันข้ามการแยกโครงสร้างข้อมูลจากชุดไบต์คือการดีซีเรียลไลเซชัน จาก Wikipedia

ใน Python "serialization" ไม่ได้ทำอะไรอื่นนอกจากการแปลงโครงสร้างข้อมูลที่กำหนด (เช่น a dict) ให้เป็น JSON pendant (object) ที่ถูกต้อง

  • 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

คำอธิบายของ Serialize และ Deserialize โดยใช้ 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 (สามารถเปิดได้โดยโปรแกรมแก้ไขข้อความเช่น notepad) มีข้อมูลนี้ (ข้อมูลต่อเนื่อง):

€} q (KX 6qKX 2qKX fqu.

Deserialization โดยใช้ผักดอง

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

นี่คือคำถามดั้งเดิม: deserialize และ serialize ใน JSON คืออะไร? ฉันใช้โมดูลดองของ Python เพื่อแสดงความคิด ฉันได้ใช้เครื่องมือเพื่ออธิบายความคิด คุณกำลังมุ่งเน้นไปที่เครื่องมือมากกว่าความคิด
Asif
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.