首页  >  文章  >  后端开发  >  如何在 Python 和 JavaScript 之间安全地序列化和反序列化 JSON 中的日期时间对象?

如何在 Python 和 JavaScript 之间安全地序列化和反序列化 JSON 中的日期时间对象?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-20 19:12:02401浏览

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>

datetime 对象的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn