프로그래밍 언어/Python
클래스 JSON을 직렬화 가능하게 만드는 방법
Rateye
2021. 11. 5. 10:52
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
반응형