사용자 정의 인코더를 구현하지 않고 사용자 정의 개체 JSON 직렬화 가능
Python의 기본 JSON 직렬화 메커니즘에는 json.JSONEncoder의 사용자 정의 하위 클래스를 생성하는 작업이 포함됩니다. 직렬화할 수 없는 객체를 처리합니다. 이 접근 방식은 널리 사용되지만 호출자의 코드를 수정하지 않고 JSON 클래스를 직렬화하려는 사용자에게는 번거로울 수 있습니다.
이 문제를 해결하기 위한 한 가지 잠재적인 해결책은 Python의 원숭이 패치 기술을 활용하는 것입니다. 여기에는 런타임 시 소스 코드를 변경하여 기존 모듈의 동작을 수정하는 작업이 포함됩니다. 이 경우 json 모듈의 JSONEncoder.default() 메서드를 수정하여 직렬화되는 개체에 특수 "to_json" 메서드가 있는지 확인할 수 있습니다. 이러한 메소드가 존재하는 경우 객체의 JSON 표현을 생성하는 데 사용할 수 있습니다.
이 접근 방식을 구현하려면 다음 코드를 사용하여 모듈(예: make_json_serialized.py)을 생성하세요.
<code class="python">from json import JSONEncoder def _default(self, obj): return getattr(obj.__class__, "to_json", _default.default)(obj) _default.default = JSONEncoder.default # Save unmodified default. JSONEncoder.default = _default # Replace it.</code>
이 코드는 직렬화되는 개체에서 "to_json" 메서드를 확인하기 위해 JSONEncoder.default() 메서드를 수정합니다. 발견되면 해당 메소드를 사용하여 JSON 표현을 생성합니다. 그렇지 않으면 기본 동작이 사용됩니다.
이 모듈을 사용하려면 JSON 직렬화 작업 전에 모듈을 가져와서 원숭이 패치를 적용하세요.
<code class="python">import make_json_serializable</code>
이제 "to_json" 메서드는 사용자 정의 인코더 없이 해당 메서드를 사용하여 직렬화됩니다.
그러나 이 접근 방식을 사용하려면 여전히 JSON을 직렬화하려는 각 클래스에 대해 사용자 정의 "to_json" 메서드를 구현해야 합니다. 더 많은 유연성을 제공하는 대체 솔루션은 피클 모듈을 사용하여 객체를 자동으로 직렬화 및 역직렬화하는 것입니다.
JSONEncoder.default() 메서드를 원숭이 패치하여 비표준 JSON 데이터 유형을 피클함으로써 다음과 같은 문제를 제거할 수 있습니다. 사용자 정의 직렬화 방법이 필요합니다. 그러나 역직렬화 프로세스에는 피클된 객체를 처리하기 위한 사용자 정의 object_hook 함수가 필요합니다.
이 접근 방식은 호출자의 코드 수정 없이 사용자 정의 객체 JSON을 직렬화할 수 있도록 하는 더 명확하고 일반적인 방법을 제공합니다.
위 내용은 사용자 정의 인코더를 구현하지 않고 Python에서 사용자 정의 개체 JSON을 직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!