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


답변:


229

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

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

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

{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
차이점을 기억하기 위해 사용하는 니모닉 장치는 "직렬화가 객체를 일련 번호로 바꾼다는 것"
Janac Meena

1
왜 우리는 그냥"{foo: [1, 4, 7, 10], bar: "baz"}"
panoet

2
@EnricoMariaDeAngelis JSON 속성은 따옴표로 묶어야합니다. 필수입니다-위키에서 첫 번째 예를 확인하십시오. en.wikipedia.org/wiki/JSON
Cloud

8

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

파이썬에서 "직렬화"는 주어진 데이터 구조 (예 : 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


-3

파이썬을 이용한 직렬화 및 역 직렬화에 대한 설명

파이썬에서는 피클 모듈 이 직렬화에 사용됩니다. 따라서 직렬화 프로세스 를 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'}


4
그러나 사용자는 피클이 아닌 JSON에 대해 물었습니다. 이것은 다소 주제가 아닙니다.
smci

이것은 원래 질문입니다 .JSON에서 직렬화 해제 및 직렬화 란 무엇입니까? 아이디어를 보여주기 위해 Python의 pickle 모듈을 사용했습니다. 아이디어를 설명하는 도구를 사용했습니다. 당신은 생각보다 도구에 더 집중하고 있습니다.
Asif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.