如何为日期字段补前导零并转换为YYYY-MM-DD格式?
如何将JSON中的短格式日期转换为YYYY-MM-DD格式?
我的JSON文件中有部分日期格式如下:
2020-12-11 2020-5-1 2020-3-21希望将它们转换为
YYYY-MM-DD格式,为单数字的月份和日期添加前导零,期望输出:2020-12-11 2020-05-01 2020-03-21
以下是几种实用的实现方式:
方法1:Python脚本处理
借助datetime模块解析日期后重新格式化,同时遍历JSON文件修改对应字段:
import json from datetime import datetime def fix_date(date_str): # 解析原始日期字符串 dt = datetime.strptime(date_str, "%Y-%m-%d") # 格式化为带前导零的标准格式 return dt.strftime("%Y-%m-%d") # 读取目标JSON文件 with open("source.json", "r", encoding="utf-8") as f: json_data = json.load(f) # 假设日期存储在名为"date"的字段中,根据实际结构调整遍历逻辑 for entry in json_data: if "date" in entry: entry["date"] = fix_date(entry["date"]) # 写入修正后的JSON文件 with open("fixed.json", "w", encoding="utf-8") as f: json.dump(json_data, f, indent=2, ensure_ascii=False)
方法2:Node.js脚本处理
用正则表达式直接替换字符串,无需解析日期,适合快速批量修改:
const fs = require('fs'); // 读取文件内容 const rawContent = fs.readFileSync('source.json', 'utf8'); // 正则匹配并补全前导零 const fixedContent = rawContent // 处理月和日都是单数字的情况 .replace(/(\d{4})-(\d{1})-(\d{1})/g, '$1-0$2-0$3') // 处理月单数字、日两位的情况 .replace(/(\d{4})-(\d{1})-(\d{2})/g, '$1-0$2-$3') // 处理月两位、日单数字的情况 .replace(/(\d{4})-(\d{2})-(\d{1})/g, '$1-$2-0$3'); // 写入修正后的文件 fs.writeFileSync('fixed.json', fixedContent, 'utf8');
方法3:命令行sed工具(Linux/macOS)
通过sed命令直接在终端批量替换:
sed -E 's/([0-9]{4})-([0-9])-([0-9])/\1-0\2-0\3/g; s/([0-9]{4})-([0-9])-([0-9]{2})/\1-0\2-\3/g; s/([0-9]{4})-([0-9]{2})-([0-9])/\1-\2-0\3/g' source.json > fixed.json
内容的提问来源于stack exchange,提问作者Mehran Goodaz
相关产品推荐
相关产品推荐

