ホームページ  >  記事  >  バックエンド開発  >  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 を発生させます。

セット用のカスタム エンコーダー:
を作成できます。エンコード前にセットをリストに変換してセットを処理するカスタム エンコーダー:

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。