JSON 직렬화에서 JSON이 아닌 직렬화 가능 유형 처리
문제:
사용자 정의가 포함된 Python 세트 인코딩 hash 및 eq가 있는 객체는 json.dumps 메서드에서 TypeError를 발생시킵니다.
Set용 사용자 정의 인코더:
생성할 수 있습니다. 인코딩하기 전에 집합을 목록으로 변환하여 처리하는 사용자 정의 인코더:
<code class="python">import json class SetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) return json.JSONEncoder.default(self, obj)</code>
중첩 및 복합 유형 처리:
중첩 및 복합 유형이 인코딩되는 방식을 사용자 정의하려면 다음을 수행할 수 있습니다. 다양한 데이터 유형을 고려하려면 인코더의 기본 방법을 재정의하세요. 예를 들어 날짜를 처리하려면 다음을 사용할 수 있습니다.
<code class="python">class CustomEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.datetime): return obj.isoformat() return json.JSONEncoder.default(self, obj)</code>
키-값 변환 처리:
JSONEncoder의 기본 메서드는 정의한 변환을 적용합니다. 객체의 모든 값. 키와 값을 구분하지 않습니다. 따라서 키-값 변환을 명시적으로 처리하려면 사용자 정의 인코더에 로직을 구현해야 합니다.
중첩 개체의 예:
중첩 개체를 처리하려면 재귀적으로 다음을 수행할 수 있습니다. 해당 값에 대해 직렬화 프로세스를 호출합니다. 예를 들어, 중첩 세트를 처리하려면 다음을 수행할 수 있습니다.
<code class="python">class NestedSetEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, set): return list(obj) if isinstance(obj, dict): return {key: NestedSetEncoder().encode(value) for key, value in obj.items()} return json.JSONEncoder.default(self, obj)</code>
JSONEncoder를 확장하고 특정 데이터 유형을 처리하도록 기본 메소드를 재정의함으로써 JSON 직렬화 프로세스를 사용자 정의하여 다양하고 복잡한 데이터 유형을 수용할 수 있습니다. -표준형.
위 내용은 Python JSON 직렬화에서 JSON이 아닌 직렬화 가능 유형을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!