Deserialize và serialization trong JSON là gì?


Câu trả lời:


228

JSON là một định dạng mã hóa các đối tượng trong một chuỗi. Tuần tự hóa có nghĩa là chuyển đổi một đối tượng thành chuỗi đókhử lưu huỳnh là hoạt động nghịch đảo của nó (chuyển đổi chuỗi -> đối tượng) .

Khi truyền dữ liệu hoặc lưu trữ chúng trong một tệp, dữ liệu được yêu cầu là các chuỗi byte, nhưng các đối tượng phức tạp hiếm khi ở định dạng này. Tuần tự hóa có thể chuyển đổi các đối tượng phức tạp này thành chuỗi byte để sử dụng như vậy. Sau khi các chuỗi byte được truyền đi, người nhận sẽ phải khôi phục đối tượng ban đầu từ chuỗi byte. Điều này được gọi là khử lưu huỳnh.

Nói rằng, bạn có một đối tượng:

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

tuần tự hóa thành JSON sẽ chuyển đổi nó thành một chuỗi:

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

có thể được lưu trữ hoặc gửi qua dây đến bất cứ nơi nào. Sau đó, người nhận có thể giải tuần tự chuỗi này để lấy lại đối tượng ban đầu. {foo: [1, 4, 7, 10], bar: "baz"}.


3
@kennytm - Tôi đang cố gắng quấn đầu xung quanh gửi đồ qua dây. Bất kể tôi sử dụng mã hóa nhị phân hay sử dụng json, xml hoặc proto buf - dữ liệu luôn phải ở dạng byte trước khi chúng có thể được gửi qua dây. Điều đó có đúng không?
Nertal

1
@Nertal Có. ___
kennytm

1
Một thiết bị ghi nhớ mà tôi sử dụng để ghi nhớ sự khác biệt là "Tuần tự hóa biến các đối tượng thành số sê-ri"
Janac Meena

1
Vậy tại sao chúng ta không"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet

2
@EnricoMariaDeAngelis Thuộc tính JSON phải nằm trong dấu ngoặc kép. Đây là một điều cần thiết - hãy xem ví dụ đầu tiên trên wiki: en.wikipedia.org/wiki/JSON
Cloud

8

Trong ngữ cảnh lưu trữ dữ liệu, tuần tự hóa (hoặc tuần tự hóa) là quá trình dịch cấu trúc dữ liệu hoặc trạng thái đối tượng sang định dạng có thể được lưu trữ (ví dụ: trong tệp hoặc bộ nhớ đệm) hoặc được truyền (ví dụ: qua kết nối mạng liên kết) và xây dựng lại sau. [...]
Các hoạt động ngược lại, giải nén một cấu trúc dữ liệu từ một loạt các byte, là deserialization . Từ Wikipedia

Trong Python "tuần tự hóa" không có gì khác ngoài việc chuyển đổi cấu trúc dữ liệu đã cho (ví dụ a dict) thành mặt dây chuyền JSON hợp lệ của nó (đối tượng).

  • Python Truesẽ được chuyển đổi thành JSON truevà từ điển sẽ được gói gọn trong dấu ngoặc kép.
  • Bạn có thể dễ dàng nhận ra sự khác biệt giữa từ điển Python và JSON bằng các giá trị Boolean của chúng:
    • Con trăn : True/ False,
    • JSON : true/false
  • Mô-đun dựng sẵn của Python jsonlà cách tiêu chuẩn để thực hiện tuần tự hóa:

Mã ví dụ:

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

Nguồn: realpython.com


-3

Giải thích về serialize và Deserialize bằng Python

Trong python, mô-đun dưa được sử dụng để tuần tự hóa. Vì vậy, quá trình tuần tự hóa được gọi là tẩy trong Python. Mô-đun này có sẵn trong thư viện tiêu chuẩn Python .

Tuần tự hóa bằng cách sử dụng dưa chua

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

Tệp PICKLE (có thể được mở bằng trình soạn thảo văn bản như notepad) chứa tệp này (dữ liệu được tuần tự hóa):

€} q (KX 6qKX 2qKX fqu.

Khử muối bằng dưa chua

import pickle

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

print(get_deserialized_data_back)

Đầu ra:

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


4
Tuy nhiên, người dùng đã hỏi về JSON không phải là dưa chua. Điều này là hơi bất thường.
smci

Đây là câu hỏi ban đầu: Deserialize và serialization trong JSON là gì? Tôi đã sử dụng mô-đun dưa chua của Python để thể hiện ý tưởng. Tôi đã sử dụng một công cụ để giải thích một ý tưởng. Bạn đang tập trung vào công cụ nhiều hơn ý tưởng.
Asif
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.