JSON シリアル化での非 JSON シリアル化可能型の処理
問題:
カスタムを含む Python セットのエンコードhash と eq を持つオブジェクトは、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 サイトの他の関連記事を参照してください。