在Python 和JavaScript 之間序列化和反序列化JSON Datetime
在Web 開發中,在不同系統之間傳輸資料至關重要。在使用 JSON 作為資料交換格式的上下文中處理 Python 的 datetime.datetime 物件時,特別是在涉及與 JavaScript 通訊的場景中,會出現一個常見的挑戰。
要有效應對這項挑戰,您可以利用預設值json.dumps 函數的參數。透過定義自訂 date_handler 函數並將其作為預設參數傳遞,您可以控制如何將日期時間物件序列化為 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中文網其他相關文章!