You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归识别并转换JSON中符合指定格式的日期时间字符串

嵌套JSON指定格式时间字符串转datetime实现方案

完全可以实现,核心是通过深度优先递归遍历所有JSON节点,无需提前预知结构即可支持任意层级嵌套,具体逻辑如下:

  • 遍历逻辑:遇到JSON对象(字典)则遍历所有键值对,遇到JSON数组(列表)则遍历所有元素,遇到嵌套结构就递归进入下一层处理
  • 匹配逻辑:对所有字符串类型的值,直接用datetime.strptime按%Y-%m-%dT%H:%M:%S格式尝试解析,解析成功则替换为datetime对象,解析失败则保留原字符串,避免误转普通文本
  • 兼容逻辑:数字、布尔值、空值等非字符串类型直接原样返回,不做额外处理

参考实现代码(Python)

from datetime import datetime
from typing import Any
import json

def recursive_convert_datetime(target: Any) -> Any:
    # 处理字典结构
    if isinstance(target, dict):
        return {key: recursive_convert_datetime(value) for key, value in target.items()}
    # 处理列表结构
    elif isinstance(target, list):
        return [recursive_convert_datetime(item) for item in target]
    # 处理字符串,尝试解析时间
    elif isinstance(target, str):
        try:
            return datetime.strptime(target, "%Y-%m-%dT%H:%M:%S")
        except ValueError:
            return target
    # 其余基础类型直接返回
    else:
        return target


# 测试用例
if __name__ == "__main__":
    raw_json = """
    {
        "data":[
            {
                "name":"Testing",
                "dob":"2001-01-01T01:00:30"
            },
            {
                "name":"Testing2",
                "dob":"2001-01-01T01:00:30",
                "licence_info":{
                    "issue_date":"2020-01-01T01:00:30"
                }
            }
        ]
    }
    """
    parsed_data = json.loads(raw_json)
    converted_result = recursive_convert_datetime(parsed_data)

    # 验证转换效果
    print(type(converted_result["data"][0]["dob"]))  # 输出: <class 'datetime.datetime'>
    print(type(converted_result["data"][1]["licence_info"]["issue_date"])) # 输出: <class 'datetime.datetime'>
    print(type(converted_result["data"][0]["name"])) # 输出: <class 'str'> 普通字符串不受影响

提示:如果后续需要兼容带毫秒、时区的时间格式,仅需要调整strptime的格式匹配规则,递归遍历的核心逻辑不需要修改。

内容的提问来源于stack exchange,提问作者rainman_s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 10:54:48