[json] JSON에서 직렬화 해제 및 직렬화 란 무엇입니까?

JSON으로 “직렬화 해제”및 “직렬화”라는 용어를 보았습니다. 그들은 무엇을 의미합니까?



답변

JSON은 문자열로 객체를 인코딩하는 형식입니다. 직렬화 는 객체를 해당 문자열로 변환하는 것을 의미 하며 역 직렬화는 역 연산입니다 (문자열 변환-> 객체) .

데이터를 전송하거나 파일에 저장할 때 데이터는 바이트 문자열이어야하지만 복잡한 객체는이 형식에서는 거의 없습니다. 직렬화는 이러한 복잡한 객체를 사용하기 위해 바이트 문자열로 변환 할 수 있습니다. 바이트 스트링이 전송 된 후 수신자는 바이트 스트링에서 원래 오브젝트를 복구해야합니다. 이것을 역 직렬화라고합니다.

개체가 있다고 가정 해보십시오.

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

JSON으로 직렬화하면 문자열로 변환됩니다.

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

와이어를 통해 어디에나 저장하거나 보낼 수 있습니다. 그런 다음 수신자는이 문자열을 역 직렬화하여 원래 오브젝트를 다시 가져올 수 있습니다. {foo: [1, 4, 7, 10], bar: "baz"}.


답변

데이터 저장과 관련하여 직렬화 (또는 직렬화)는 데이터 구조 또는 객체 상태를 저장 (예 : 파일 또는 메모리 버퍼)하거나 전송 (예 : 네트워크 연결을 통해) 할 수있는 형식으로 변환하는 프로세스입니다. 링크) 나중에 재구성합니다. […]
일련의 바이트에서 데이터 구조를 추출하는 반대 작업은 역 직렬화 입니다. 위키 백과에서

파이썬에서 “직렬화”는 주어진 데이터 구조 (예 : a dict)를 유효한 JSON 펜던트 (객체) 로 변환하는 것 외에는 아무것도하지 않습니다 .

  • 파이썬 True은 JSON으로 변환되고 true사전 자체는 따옴표로 캡슐화됩니다.
  • 부울 값으로 Python 사전과 JSON의 차이점을 쉽게 확인할 수 있습니다.
    • 파이썬 : True/ False,
    • JSON : 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’}


답변