Python提取嵌套JSON中符合条件的最早timestamp代码优化咨询
原有代码逻辑错误说明
- 数据结构访问错误:
hs_lead_info是包含value、versions两个键的字典,不是数组,直接遍历hs_lead_info只会拿到它的键名字符串,无法获取版本数据 - 嵌套层级错误:
versions是hs_lead_info下的数组,每个数组元素才是包含value、timestamp字段的单条版本记录,原代码写的field['versions']['value']完全搞错了字段层级 min函数使用错误:min('timestamp')是对字符串'timestamp'的单个字符取最小值,和你要取多个条目最小timestamp的需求完全无关- 取值逻辑错误:原代码匹配到第一个符合条件的条目就直接返回,没有收集所有符合条件的条目再取最小时间
- 数据源路径错误:结合完整业务代码看,
hs_lead_status是存放在data['properties']下的,你直接从data['hs_lead_status']根路径取值根本拿不到数据
修正后代码
直接替换原代码中hs_lead_info定义和get_hs_lead_info函数即可:
hs_lead_info = data.get("properties", {}).get("hs_lead_status", {}) def get_hs_lead_info(): # 先取版本列表,不存在就返回空 versions = hs_lead_info.get("versions", []) # 过滤所有value等于目标值的版本条目 matched_versions = [v for v in versions if v.get("value") == "HANDOVER_TO_ADVOCATE"] if not matched_versions: # 无匹配条目返回None,可根据业务需求改成空字符串 return None # 取所有匹配条目的最小timestamp return min(v.get("timestamp") for v in matched_versions)
调用时修改对应字段赋值即可:
hand_over_advocate_date=get_hs_lead_info(),
本地校验方法
不需要依赖测试环境,直接用你提供的示例JSON构造测试数据即可验证逻辑:
# 构造测试用模拟数据 test_data = { "properties": { "hs_lead_status": { "value": "Closure - Successful - Re-Employment", "versions": [ # 把你示例里的所有versions条目完整粘贴到这里即可 {"value": "Closure - Successful - Re-Employment", "timestamp": 1632381167439}, {"value": "(CH)_Court_Order_Filed_Advocard", "timestamp": 1616073472239}, {"value": "HANDOVER_TO_ADVOCATE", "timestamp": 1616073465338}, {"value": "HANDOVER_TO_ADVOCATE", "timestamp": 1608626160658} ] } } } # 调用函数测试,预期输出最小timestamp:1608626160658 print(get_hs_lead_info())
本地运行确认输出符合预期后再上线即可。
内容的提问来源于stack exchange,提问作者Amy raygada
相关产品推荐
相关产品推荐

