목차
자동 직렬화에 대한 또 다른 접근 방식은 원숭이 패치 JSONEncoder와 함께 pickle 모듈을 사용하는 것입니다. 표준 JSON 유형이 아닌 Python 객체를 피클하기 위해 default() 메서드를 재정의하면 특별한 클래스 메서드 없이도 직렬화를 달성할 수 있습니다.
원래 Python을 재구성하려면 피클 기반 직렬화로 생성된 JSON 표현의 개체인 경우 역직렬화 중에 사용자 지정 object_hook 함수를 제공할 수 있습니다. 이 함수는 직렬화 중에 추가된 '_python_object' 키를 감지하고 이를 사용하여 pickle.loads()를 사용하여 원본 객체를 재구성할 수 있습니다.
json 모듈은 직접 제공하지 않지만 기본 인코더를 사용하여 JSON 개체를 직렬화할 수 있게 만드는 방법은 Monkey-Patching이나 pickle 모듈을 사용하여 이를 달성하는 것이 가능합니다. 피클 접근 방식을 사용하면 대부분의 Python 객체를 자동으로 직렬화할 수 있으므로 보다 일반화된 솔루션이 됩니다.
백엔드 개발 파이썬 튜토리얼 Python의 기본 인코더를 사용하여 사용자 정의 개체 JSON을 직렬화하려면 어떻게 해야 합니까?

Python의 기본 인코더를 사용하여 사용자 정의 개체 JSON을 직렬화하려면 어떻게 해야 합니까?

Oct 31, 2024 am 12:26 AM

How can I make custom objects JSON serializable using the default encoder in Python? 
그러나 기본 인코더를 사용하여 객체를 직렬화할 수 있도록 하려면 어떻게 해야 할까요? 불행히도 json 모듈이 제공하는 간단한 솔루션은 없습니다.

기본 인코딩에 Monkey-Patching 사용

json 모듈의 한계에도 불구하고 다음과 같은 기술을 통해 원하는 기능을 달성하는 것이 가능합니다. 원숭이 패치. 여기에는 default() 메서드를 대체하여 json 모듈의 기본 동작을 수정하는 작업이 포함됩니다.
<code class="python">class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Foo):
            return obj.to_json()

        return json.JSONEncoder.default(self, obj)

print(json.dumps(obj, cls=CustomEncoder))</code>
로그인 후 복사

JSONEncoder.default() 메서드를 수정하는 모듈을 생성하면 모듈이 다음과 같이 모든 후속 JSON 직렬화 작업에 영향을 미칩니다. sys.modules에 캐시되어 있습니다. 다음 독립형 모듈은 이 Monkey-Patch를 구현하는 방법을 보여줍니다.

이 Monkey-패치 모듈을 활용하려면 간단히 가져오면 변경 사항이 json 모듈에 자동으로 적용됩니다.

객체 직렬화를 위한 특수 메서드 추가

사용자 정의 클래스의 자동 JSON 직렬화를 활성화하려면 클래스 내에 __json__이라는 특수 메서드를 정의할 수 있습니다. JSONEncoder는 이 메서드를 확인하고 직렬화를 위해 반환 값을 사용합니다. 이렇게 하면 명시적인 to_json() 메서드가 필요하지 않습니다.
<code class="python">import json

def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder.default
JSONEncoder.default = _default</code>
로그인 후 복사

Pickle을 사용하여 Python 객체 직렬화

자동 직렬화에 대한 또 다른 접근 방식은 원숭이 패치 JSONEncoder와 함께 pickle 모듈을 사용하는 것입니다. 표준 JSON 유형이 아닌 Python 객체를 피클하기 위해 default() 메서드를 재정의하면 특별한 클래스 메서드 없이도 직렬화를 달성할 수 있습니다.

pickle을 사용한 역직렬화

원래 Python을 재구성하려면 피클 기반 직렬화로 생성된 JSON 표현의 개체인 경우 역직렬화 중에 사용자 지정 object_hook 함수를 제공할 수 있습니다. 이 함수는 직렬화 중에 추가된 '_python_object' 키를 감지하고 이를 사용하여 pickle.loads()를 사용하여 원본 객체를 재구성할 수 있습니다.

결론

json 모듈은 직접 제공하지 않지만 기본 인코더를 사용하여 JSON 개체를 직렬화할 수 있게 만드는 방법은 Monkey-Patching이나 pickle 모듈을 사용하여 이를 달성하는 것이 가능합니다. 피클 접근 방식을 사용하면 대부분의 Python 객체를 자동으로 직렬화할 수 있으므로 보다 일반화된 솔루션이 됩니다.

위 내용은 Python의 기본 인코더를 사용하여 사용자 정의 개체 JSON을 직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Mar 05, 2025 am 09:58 AM

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법

파이썬에서 파일을 다운로드하는 방법 파이썬에서 파일을 다운로드하는 방법 Mar 01, 2025 am 10:03 AM

파이썬에서 파일을 다운로드하는 방법

파이썬의 이미지 필터링 파이썬의 이미지 필터링 Mar 03, 2025 am 09:44 AM

파이썬의 이미지 필터링

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? Mar 10, 2025 pm 06:54 PM

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까?

Python을 사용하여 PDF 문서를 사용하는 방법 Python을 사용하여 PDF 문서를 사용하는 방법 Mar 02, 2025 am 09:54 AM

Python을 사용하여 PDF 문서를 사용하는 방법

Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법 Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법 Mar 02, 2025 am 10:10 AM

Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법

NLTK (Natural Language Toolkit) 소개 NLTK (Natural Language Toolkit) 소개 Mar 01, 2025 am 10:05 AM

NLTK (Natural Language Toolkit) 소개

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Mar 10, 2025 pm 06:52 PM

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까?

See all articles