>  기사  >  백엔드 개발  >  Python JSON 직렬화에서 JSON이 아닌 직렬화 가능 유형을 처리하는 방법은 무엇입니까?

Python JSON 직렬화에서 JSON이 아닌 직렬화 가능 유형을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 00:28:30194검색

How to Handle Non-JSON Serializable Types in Python JSON Serialization?

JSON 직렬화에서 JSON이 아닌 직렬화 가능 유형 처리

문제:
사용자 정의가 포함된 Python 세트 인코딩 hasheq가 있는 객체는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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