728x90
반응형
질문 : 클래스 JSON을 직렬화 가능하게 만드는 방법
파이썬 클래스를 직렬화하는 방법은 무엇입니까?
간단한 수업 :
class FileItem:
def __init__(self, fname):
self.fname = fname
다음과 같은 결과를 얻으려면 어떻게해야합니까?
>>> import json
>>> my_file = FileItem('/foo/bar')
>>> json.dumps(my_file)
TypeError: Object of type 'FileItem' is not JSON serializable
오류없이
답변
예상되는 출력에 대한 아이디어가 있습니까? 예를 들어, 그렇게할까요?
>>> f = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'
json.dumps(f.__dict__)
호출 할 수 있습니다.
더 많은 사용자 정의 출력을 원하면 JSONEncoder
를 하위 클래스로 만들고 사용자 정의 직렬화를 구현해야합니다.
간단한 예는 아래를 참조하십시오.
>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
def default(self, o):
return o.__dict__
>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'
그런 다음이 클래스를 cls
json.dumps()
메서드에 전달합니다.
json.dumps(cls=MyEncoder)
디코딩도 원한다면 JSONDecoder
클래스에 object_hook
을 제공해야합니다. 예를 들면 :
>>> def from_json(json_object):
if 'fname' in json_object:
return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>>
출처 : https://stackoverflow.com/questions/3768895/how-to-make-a-class-json-serializable
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python에서 이전 스타일과 새 스타일 클래스의 차이점 (0) | 2021.11.08 |
---|---|
파이썬 딕셔너리 'has_key ()' vs'in' (0) | 2021.11.05 |
파이썬에서 배열을 선언하는 방법 (0) | 2021.11.05 |
Python에서 파일 압축 해제 하는 방법 (0) | 2021.11.05 |
파이썬 "if x is not None" or "if not x is None" (0) | 2021.11.05 |