JSONDecodeError: Extra data报错:如何拆分多段Payload调用API
问题解决:JSONDecodeError: Extra data 及拆分Payload方案
错误原因
你提供的payload字符串格式不合法:既不是完整的JSON对象(缺少外层包裹的大括号,且第一个对象无对应键),也不是JSON数组,直接用json.loads()解析必然触发JSONDecodeError。
解决方案
先修正原始字符串格式,解析后拆分出每个用户数据,再包装成API所需的独立Payload:
修正并拆分的代码示例
import json # 原始错误格式的payload raw_payload = '{"CustomerID":"15263","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"},"1":{"CustomerID":"15891","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"},"2":{"CustomerID":"16986","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"}' # 1. 修正格式:给首尾补大括号,给第一个对象补键"0",转为合法JSON对象 fixed_payload = f'{{"0":{raw_payload}}}' # 2. 解析修正后的JSON parsed_data = json.loads(fixed_payload) # 3. 提取所有用户数据,包装成目标格式的独立Payload api_payloads = [] for user_data in parsed_data.values(): api_payload = json.dumps({"data": user_data}) api_payloads.append(api_payload) # 输出结果,每个元素都是可直接调用API的独立Payload for idx, payload in enumerate(api_payloads): print(f"第{idx+1}个API Payload:") print(payload) print("---")
运行结果
输出的三个独立Payload与目标示例结构一致:
第1个API Payload: {"data": {"CustomerID": "15263", "Timestamp": "2023-07-28T15:12:48Z", "Status": "networkRisk"}} --- 第2个API Payload: {"data": {"CustomerID": "15891", "Timestamp": "2023-07-28T15:12:48Z", "Status": "networkRisk"}} --- 第3个API Payload: {"data": {"CustomerID": "16986", "Timestamp": "2023-07-28T15:12:48Z", "Status": "networkRisk"}}
简洁替代方案(若原始字符串应为数组格式)
如果原始字符串原本是数组格式写错(带了多余的"1":、"2":键),可直接修正为数组:
import json raw_payload = '{"CustomerID":"15263","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"},"1":{"CustomerID":"15891","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"},"2":{"CustomerID":"16986","Timestamp":"2023-07-28T15:12:48Z","Status":"networkRisk"}' # 移除多余键标识,修正为JSON数组 fixed_payload = f'[{raw_payload.replace(',"1":', ',').replace(',"2":', ',')}]' parsed_data = json.loads(fixed_payload) api_payloads = [json.dumps({"data": item}) for item in parsed_data]
内容的提问来源于stack exchange,提问作者Pregz
相关产品推荐
相关产品推荐

