답변:
JSON은 문자열로 객체를 인코딩하는 형식입니다. 직렬화 는 객체를 해당 문자열로 변환하는 것을 의미 하며 역 직렬화는 역 연산입니다 (문자열 변환-> 객체) .
데이터를 전송하거나 파일에 저장할 때 데이터는 바이트 문자열이어야하지만 복잡한 객체는이 형식에서는 거의 없습니다. 직렬화는 이러한 복잡한 객체를 사용하기 위해 바이트 문자열로 변환 할 수 있습니다. 바이트 스트링이 전송 된 후 수신자는 바이트 스트링에서 원래 오브젝트를 복구해야합니다. 이것을 역 직렬화라고합니다.
개체가 있다고 가정 해보십시오.
{foo: [1, 4, 7, 10], bar: "baz"}
JSON으로 직렬화하면 문자열로 변환됩니다.
'{"foo":[1,4,7,10],"bar":"baz"}'
와이어를 통해 어디에나 저장하거나 보낼 수 있습니다. 그런 다음 수신자는이 문자열을 역 직렬화하여 원래 오브젝트를 다시 가져올 수 있습니다. {foo: [1, 4, 7, 10], bar: "baz"}
.
"{foo: [1, 4, 7, 10], bar: "baz"}"
데이터 저장과 관련하여 직렬화 (또는 직렬화)는 데이터 구조 또는 객체 상태를 저장 (예 : 파일 또는 메모리 버퍼)하거나 전송 (예 : 네트워크 연결을 통해) 할 수있는 형식으로 변환하는 프로세스입니다. 링크) 나중에 재구성합니다. [...]
일련의 바이트에서 데이터 구조를 추출하는 반대 작업은 역 직렬화 입니다. 위키 백과에서
파이썬에서 "직렬화"는 주어진 데이터 구조 (예 : a dict
)를 유효한 JSON 펜던트 (객체) 로 변환하는 것 외에는 아무것도하지 않습니다 .
True
은 JSON으로 변환되고 true
사전 자체는 따옴표로 캡슐화됩니다.True
/ False
,true
/false
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
파이썬을 이용한 직렬화 및 역 직렬화에 대한 설명
파이썬에서는 피클 모듈 이 직렬화에 사용됩니다. 따라서 직렬화 프로세스 를 Python에서 pickling 이라고 합니다. 이 모듈 은 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'}