Azure Data Factory中更新JSON指定表时间及全局更新时间的需求
解决方案
核心步骤
要实现需求,需要完成以下关键操作:
- 确保JSON格式合法(你提供的原始JSON缺失闭合括号,需补全)
- 解析JSON为可操作的数据结构
- 获取格式化后的当前时间
- 遍历表数组匹配目标表名并更新
time字段 - 更新根节点的
lastupdate字段 - 序列化回JSON字符串
Python 实现示例
import json from datetime import datetime # 补全后的合法JSON original_json = ''' { "name" :"job", "lastupdate": "2023-09-15", "schedule": { "table" : [ { "tablename":"mani", "time":"2023-09-15" }, { "tablename":"user", "time":"2023-09-10" } // 其余8个表对象省略 ] } } ''' # 解析JSON为字典 data = json.loads(original_json) # 生成YYYY-MM-DD格式的当前时间 current_date = datetime.now().strftime("%Y-%m-%d") # 指定需要更新的表名 target_tablename = "mani" # 遍历表列表,匹配并更新time字段 for item in data["schedule"]["table"]: if item["tablename"] == target_tablename: item["time"] = current_date break # 如需更新所有同名表,移除该行 # 更新根节点的lastupdate data["lastupdate"] = current_date # 输出格式化后的更新结果 print(json.dumps(data, indent=2))
JavaScript 实现示例
// 补全后的合法JSON字符串 const originalJSON = `{ "name" :"job", "lastupdate": "2023-09-15", "schedule": { "table" : [ { "tablename":"mani", "time":"2023-09-15" }, { "tablename":"user", "time":"2023-09-10" } ] } }`; // 解析JSON const data = JSON.parse(originalJSON); // 获取YYYY-MM-DD格式的当前时间 const currentDate = new Date().toISOString().split('T')[0]; // 指定目标表名 const targetTablename = "mani"; // 遍历更新匹配的表 data.schedule.table.forEach(table => { if (table.tablename === targetTablename) { table.time = currentDate; } }); // 更新根节点的lastupdate data.lastupdate = currentDate; // 输出结果 console.log(JSON.stringify(data, null, 2));
常见失败原因排查
- JSON语法错误:原始JSON缺失
]和},解析前必须补全,否则会抛出语法错误 - 匹配逻辑错误:表名匹配时未区分大小写,或遍历路径错误(比如写成
data.table而非data.schedule.table) - 时间格式不统一:当前时间格式与原有
time字段格式不一致,需确保都是YYYY-MM-DD - 遗漏根节点更新:忘记设置
lastupdate为当前时间,导致该字段未同步更新
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

