ホームページ >ウェブフロントエンド >jsチュートリアル >Python と JavaScript の間で JSON 日時をシリアル化および逆シリアル化する方法は?

Python と JavaScript の間で JSON 日時をシリアル化および逆シリアル化する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-19 17:33:02931ブラウズ

How to Serialize and Deserialize JSON Datetimes between Python and JavaScript?

Python と JavaScript の間の JSON 日時のシリアル化と逆シリアル化

Web 開発では、異なるシステム間でのデータ送信が重要です。 JSON がデータ交換形式として使用されるコンテキスト、特に JavaScript との通信を伴うシナリオで Python の datetime.datetime オブジェクトを処理するときに、一般的な課題の 1 つが発生します。

この課題に効果的に取り組むには、デフォルトを利用できます。 json.dumps 関数のパラメータ。カスタムの date_handler 関数を定義し、それをデフォルトの引数として渡すことで、datetime オブジェクトを JavaScript が解釈できる形式にシリアル化する方法を制御できます。

date_handler 関数のサンプル実装は次のとおりです。

<code class="python">date_handler = lambda obj: (
    obj.isoformat()
    if isinstance(obj, (datetime.datetime, datetime.date))
    else None
)</code>

この関数は、オブジェクトが datetime.datetime または datetime.date のインスタンスであるかどうかを確認し、そうであれば、オブジェクトの ISO 8601 形式の文字列表現を返します。この形式は、JavaScript のネイティブ Date オブジェクトと互換性があります。

JavaScript では、JSON.parse 関数を使用して、シリアル化された日付を含む受信した JSON 文字列を解析でき、解析された日付文字列から Date オブジェクトを作成できます。

ただし、より広範囲の複雑なデータ型を処理するには、以下のようなより包括的なデフォルトのハンドラー関数が必要になる場合があります。

<code class="python">def handler(obj):
    if hasattr(obj, 'isoformat'):
        return obj.isoformat()
    elif isinstance(obj, ...):
        return ...
    else:
        raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj))</code>

この拡張ハンドラーは日時をチェックするだけではありません。

日時オブジェクトを JavaScript に送信する場合、それらは文字列にシリアル化されることに注意してください。次に、JavaScript はこれらの文字列に基づいて Date オブジェクトを再構築します。 ISO 8601 形式は互換性を確保し、Python と JavaScript の間での便利で信頼性の高いデータ交換を可能にします。

以上がPython と JavaScript の間で JSON 日時をシリアル化および逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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