解析嵌套JSON遇TypeError:参数数量不匹配问题求助
解决TypeError: parse_pm_order_operations_dl()参数不匹配问题
错误原因
你调用parse_pm_order_operations_dl时传入了s3obj和record两个参数,但函数定义里的参数是(self, record, response)——其中response参数完全没被使用,且参数顺序和调用时不匹配,导致参数数量/位置不匹配触发报错。
修复步骤
1. 修正函数参数签名
因为你的parse_pm_order_operations_dl函数内部根本没用到s3obj或response,所以直接调整函数定义和调用逻辑:
修改调用代码(在parse_lines方法中):
# 移除不必要的s3obj参数 operations_dl = self.parse_pm_order_operations_dl(record)
修改函数定义:
# 移除无用的response参数,仅保留self和record def parse_pm_order_operations_dl(self, record): metadata = record.get('metadata') payload = record.get('payload') try: # 去掉末尾逗号,避免变量变成元组 plantMaintenanceOrderOperations = payload.get("plantMaintenanceOrderOperations") except: return [] # 返回空列表更符合后续append逻辑 if not plantMaintenanceOrderOperations: return [] # 移除不必要的json.loads调用——payload中的字段已经是列表格式 # try: # plantMaintenanceOrderOperations = json.loads(plantMaintenanceOrderOperations) # except: # return {} result = [] # 重命名循环变量,避免覆盖枚举索引 for _, item in enumerate(plantMaintenanceOrderOperations): item_data = metadata.copy() item_data.update({ 'operationStandardTextKey': item["operationStandardTextKey"], 'operationActivityNumber': convert_to_int(item["operationActivityNumber"]), 'operationDescription': item["operationDescription"], 'operationStatusSystem': item["operationStatusSystem"], 'operationStatusUser': item["operationStatusUser"], 'operationConfirmationNumber': item["plantMaintenanceOrderOperationsActualData"]["operationConfirmationNumber"], 'operationActualWork': item["plantMaintenanceOrderOperationsActualData"]["operationActualWork"], 'operationEarliestScheduledStartTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledStartTimestamp"], 'operationConstraintFinishTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationConstraintFinishTimestamp"], 'operationLatestScheduledStartTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledStartTimestamp"], 'operationEarliestScheduledStartTime': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledStartTime"], 'operationEarliestScheduledFinishTime': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledFinishTime"], 'operationConstraintFinishTime': item["plantMaintenanceOrderOperationsDates"]["operationConstraintFinishTime"], 'operationConstraintStartTime': item["plantMaintenanceOrderOperationsDates"]["operationConstraintStartTime"], 'operationLatestScheduledFinishTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledFinishTimestamp"], 'operationEarliestScheduledStartDate': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledStartDate"], 'operationConstraintFinishType': item["plantMaintenanceOrderOperationsDates"]["operationConstraintFinishType"], 'operationLatestScheduledStartDate': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledStartDate"], 'operationEarliestScheduledFinishTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledFinishTimestamp"], 'operationConstraintStartDate': item["plantMaintenanceOrderOperationsDates"]["operationConstraintStartDate"], 'operationEarliestScheduledFinishDate': item["plantMaintenanceOrderOperationsDates"]["operationEarliestScheduledFinishDate"], 'operationLatestScheduledFinishTime': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledFinishTime"], 'operationConstraintStartType': item["plantMaintenanceOrderOperationsDates"]["operationConstraintStartType"], 'operationConstraintStartTimestamp': item["plantMaintenanceOrderOperationsDates"]["operationConstraintStartTimestamp"], 'operationLatestScheduledStartTime': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledStartTime"], 'operationLatestScheduledFinishDate': item["plantMaintenanceOrderOperationsDates"]["operationLatestScheduledFinishDate"], 'operationConstraintFinishDate': item["plantMaintenanceOrderOperationsDates"]["operationConstraintFinishDate"], 'operationWorkCenterId': item["plantMaintenanceOrderOperationsInternal"]["operationWorkCenterId"], 'operationWorkCenterDescription': item["plantMaintenanceOrderOperationsInternal"]["operationWorkCenterDescription"], 'operationWorkCenterPlantId': item["plantMaintenanceOrderOperationsInternal"]["operationWorkCenterPlantId"], 'operationControKey': item["plantMaintenanceOrderOperationsInternal"]["operationControKey"], 'operationActivityType': item["plantMaintenanceOrderOperationsInternal"]["operationActivityType"], 'operationWorkActivity': item["plantMaintenanceOrderOperationsInternal"]["operationWorkActivity"], 'operationNumberOfWorkers': convert_to_int(item["plantMaintenanceOrderOperationsInternal"]["operationNumberOfWorkers"]), 'operationDuration': item["plantMaintenanceOrderOperationsInternal"]["operationDuration"], 'operationPersonalNumber': item["plantMaintenanceOrderOperationsInternal"]["operationPersonalNumber"], 'p_date': get_current_date(), 'p_hour': get_current_hour() }) result.append(item_data) return result
2. 其他关键修正说明
- 移除
plantMaintenanceOrderOperations赋值末尾的逗号:原代码多了逗号导致变量变成元组,无法正常遍历。 - 删除不必要的
json.loads调用:从你提供的JSON结构来看,plantMaintenanceOrderOperations已经是列表类型,无需二次解析。 - 修正循环变量名冲突:原代码用
idx同时作为枚举索引和数据字典的变量名,易引发逻辑错误,换成item_data更清晰。 - 空返回值从
{}改为[]:函数返回列表类型,返回空列表更符合后续append的逻辑。
内容的提问来源于stack exchange,提问作者Linde
相关产品推荐
相关产品推荐

