You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多邮政编码调用API存储JSON数据至DataFrame时遭遇JSONDecodeError错误求助

解决多个邮政编码API请求的JSONDecodeError问题

我一眼就看到了你代码里的问题所在——循环里的URL请求逻辑写错了,这才导致返回的内容不是合法的单个JSON对象,进而触发了解析错误。咱们一步步来修复:

问题根源

你在循环里已经通过字符串拼接生成了单个cep的URL:

url = "https://www.cepaberto.com/api/v3/cep?cep="+str(cep)

但紧接着又错误地用url.format(cep=ceps)去格式化这个URL——这里的ceps是整个邮政编码列表,不是当前循环的单个cep!这会让请求的URL变成类似https://www.cepaberto.com/api/v3/cep?cep=69027320['69027320', '38411206', ...],服务器返回的内容肯定不是合法的单个JSON,自然解析失败。

修正后的代码

我帮你把代码改对,还加了异常处理防止单个请求失败影响整个流程:

import requests
import pandas as pd

ceps = ['69027320', '38411206', '78118187', '12245481']
jsonfile = []
headers = {'Authorization': 'Token token=111111111111111111111111111111'}

for cep in ceps:
    # 用params传参更规范,避免字符串拼接出错
    url = "https://www.cepaberto.com/api/v3/cep"
    params = {'cep': cep}
    try:
        response = requests.get(url, params=params, headers=headers)
        # 先检查响应状态码,确保请求成功
        response.raise_for_status()
        json_data = response.json()
        jsonfile.append(json_data)
    except requests.exceptions.RequestException as e:
        print(f"请求CEP {cep} 失败: {e}")
        # 可选:添加错误标记或跳过该条目
        jsonfile.append({'cep': cep, 'error': '请求失败'})

# 生成结构化DataFrame
df = pd.json_normalize(jsonfile)
print(df)

关键改进点

  • 改用requests.get()的params参数传递邮政编码,比字符串拼接更安全,能自动处理特殊字符
  • 添加response.raise_for_status(),如果请求返回4xx/5xx错误会直接抛出异常,方便排查问题
  • 增加异常捕获逻辑,单个CEP请求失败不会导致整个程序终止
  • 移除了错误的url.format(cep=ceps)调用,确保每个请求都是针对单个CEP的

这样修改后,每个请求都会返回单个合法的JSON对象,response.json()就能正确解析,最终也能顺利生成Pandas DataFrame了。

内容的提问来源于stack exchange,提问作者Mariana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 14:12:45