カスタム メソッドを使用してデフォルトの JSON シリアル化制限を克服するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-31 03:46:31
オリジナル
673 人が閲覧しました

How to Overcome Default JSON Serialization Limitations with Custom Methods?

カスタム メソッドによるデフォルトのシリアル化制限の克服

デフォルトの JSON シリアル化では、多くの場合、組み込みの JSONEncoder を使用するのが最も便利な方法です。ただし、シリアル化可能な型から継承しないカスタム オブジェクトの場合、それは困難になる可能性があります。

デフォルト エンコーダへのモンキー パッチ適用

JSONEncoder をサブクラス化する代わりに、次のことができます。モンキーパッチを使用してデフォルトのデフォルトメソッドを変更することで、その動作を変更します。これにより、オブジェクト内の to_json メソッドをチェックし、利用可能な場合はそれをエンコードに使用する特別なロジックを追加できます。

例: シリアル化に特別なメソッドを使用する

<code class="python">import json

# Module for monkey-patching
def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder.default
JSONEncoder.default = _default

class Foo:
    def __init__(self, name):
        self.name = name
    def to_json(self):
        return '{&quot;name&quot;: &quot;%s&quot;}' % self.name

foo = Foo('sazpaz')
json_str = json.dumps(foo)</code>
ログイン後にコピー

このアプローチにより、カスタム エンコーダーを実装せずにカスタム オブジェクトをシリアル化できます。

Pickle によるシリアル化の自動化

さらに柔軟性を高めるために、pickle モジュールを使用できます。モンキーパッチと組み合わせて。非標準の JSON 型をピクルするカスタムのデフォルト メソッドを作成することで、それらを自動的にシリアル化できます。

<code class="python"># Module for pickle-based serialization
from json import JSONEncoder
import pickle

def _default(self, obj):
    return {'_python_object': pickle.dumps(obj)}

JSONEncoder.default = _default</code>
ログイン後にコピー

これにより、複雑なデータ構造を含むユーザー定義のクラスをシリアル化できます。

注: 逆シリアル化の場合、pickle データから Python オブジェクトを再構築するためのカスタム object_hook を提供できます。

以上がカスタム メソッドを使用してデフォルトの JSON シリアル化制限を克服するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!