Python と JavaScript の間で JSON の日時オブジェクトを安全にシリアル化および逆シリアル化する方法は?

Mary-Kate Olsen
リリース: 2024-10-20 19:12:02
オリジナル
401 人が閲覧しました

How to Safely Serialize and Deserialize Datetime Objects in JSON between Python and JavaScript?

JSON を使用した Python と JavaScript 間の日時オブジェクトのシリアル化と逆シリアル化

JSON を使用する場合、Python と JavaScript の間で日時オブジェクトを転送する必要が生じる場合があります。このようなオブジェクトのシリアル化は難しい場合があります。この記事では、JSON 通信で datetime オブジェクトを処理するためのベスト プラクティスについて説明します。

Python でのシリアル化

Python で datetime.datetime オブジェクトをシリアル化するには、デフォルトの json.dumps 関数を使用できます。パラメータ。このパラメーターを使用すると、日時オブジェクトを JSON シリアル化可能な形式に変換するカスタム ハンドラーを指定できます。

<code class="python">date_handler = lambda obj: (
    obj.isoformat()
    if isinstance(obj, (datetime.datetime, datetime.date))
    else None
)
json.dumps(datetime.datetime.now(), default=date_handler)
# Output: '"2010-04-20T20:08:21.634121"'</code>
ログイン後にコピー

日時オブジェクトの isoformat() メソッドは、ISO 8601 形式の文字列表現を返します。

JavaScript での逆シリアル化

JavaScript では、Date.parse() 関数を使用して、シリアル化された日時文字列を Date オブジェクトに逆シリアル化できます。

<code class="javascript">const dateString = '"2010-04-20T20:08:21.634121"';
const date = new Date(Date.parse(dateString));
// Output: Thu Apr 20 2010 20:08:21 GMT-0400 (Eastern Daylight Time)</code>
ログイン後にコピー

包括的なデフォルト ハンドラー

より複雑なシナリオでは、より包括的なデフォルト ハンドラー関数が必要になる場合があります:

<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>
ログイン後にコピー

このハンドラーは複数のオブジェクト タイプを処理でき、より有益なエラー メッセージを提供します。必要に応じて、日付オブジェクトと日時オブジェクトの両方を処理することを忘れないでください。

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

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