pandas中修改字典对象格式 实现JSON结构转换及字段计算
处理方法
核心要先解决原始返回里parameters字段存的是字符串形式的Python字典、不是原生结构化对象的问题,再按要求重组结构、计算聚合字段,步骤如下:
- 先解析外层标准JSON,取出数组里的单条记录
- 安全解析
parameters下的字典字符串,不要直接替换引号强转JSON,避免内容里带单引号时解析失败,用标准库ast.literal_eval做解析最稳妥 - 把原来的参数列表重组为
param1、param2格式的键值对 - 按条件计算聚合字段:所有参数都带
caloriesBurned键时才统计总卡路里,总时长按分钟转毫秒对齐你给出的示例值
import json import ast # 替换为你实际拿到的API返回内容 raw_response = '''[{"individual_id":"abcd1234","start_time":"2022-03-01 10:08:00","end_time":"2022-03-01 10:12:00","duration_minutes":4.0,"event_name":"activity","source":"Ple;fitbit;fitbit","parameters":["{'duration': 68.0, 'caloriesBurned': 15, 'activityName': 'Run', 'distance': 0, 'distanceUnit': 'Kilometer', 'activityLevel': [{'minutes': 0, 'name': 'sedentary'}, {'minutes': 0, 'name': 'lightly'}, {'minutes': 0, 'name': 'fairly'}, {'minutes': 0, 'name': 'very'}]}","{'duration': 68.0, 'caloriesBurned': 8, 'activityName': 'Run', 'distance': 0, 'distanceUnit': 'Kilometer', 'activityLevel': [{'minutes': 0, 'name': 'sedentary'}, {'minutes': 0, 'name': 'lightly'}, {'minutes': 0, 'name': 'fairly'}, {'minutes': 0, 'name': 'very'}]}"]}]''' # 解析外层JSON取第一条记录 data = json.loads(raw_response)[0] param_items = [] cal_valid = True total_cal = 0 # 逐个解析parameters里的字典字符串 for p_str in data["parameters"]: p = ast.literal_eval(p_str) param_items.append(p) if "caloriesBurned" in p: total_cal += p["caloriesBurned"] else: cal_valid = False # 重组parameters结构 new_params = {} for i, item in enumerate(param_items, 1): new_params[f"param{i}"] = item # 总时长:分钟转毫秒,和示例的240000对齐 new_params["totalduration"] = int(data["duration_minutes"] * 60 * 1000) # 卡路里字段按条件生成 if cal_valid: new_params["totalcaloriesburned"] = total_cal data["parameters"] = new_params # 直接输出就是你要的字典结构,需要JSON字符串可以用json.dumps(data) print(data)
注:你给出的期望格式示例里,param1的
activityLevel漏了开头的列表方括号,属于书写笔误,上述代码会保留接口返回的原始列表结构,不会修改原有合法数据。
运行上述代码处理你给出的示例输入,会得到符合要求的输出:
parameters从字符串列表转为带序号键的字典结构- 总卡路里自动求和,示例中两个活动分别为15、8,合计23
- 总时长计算结果为240000,和示例一致
- 只要任意一个参数缺失
caloriesBurned键,最终结果就不会生成totalcaloriesburned字段,匹配你的补充需求
内容的提问来源于stack exchange,提问作者kakarot
相关产品推荐
相关产品推荐

