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

Python无法将API返回JSON数据整理存储到列表问题求助

问题修复方案

现有代码核心问题

  • URL构造逻辑错误:字符串模板未设置{}占位符,format()方法无法把读取到的地籍号替换进请求地址,导致每次请求的都是固定的测试地籍号
  • 缩进逻辑错误:接口请求、返回值处理的代码全部写在for循环外部,只会对最后一次遍历到的地籍号发起请求
  • JSON解析方式不合理:将返回字节直接转字符串按空格切割提取字段,极易因返回格式变化报错,应使用内置json模块结构化解析
  • 变量调用错误:文件操作最后调用t.close(),但实际打开文件的变量名为f,会触发变量未定义报错
  • 未处理行尾换行符:从文件读取的每行内容末尾自带换行符,未清理就拼接URL会导致请求失败

修复后可运行代码

import urllib.request
import json

# 存储提取结果的列表
pindala_list = []
# 如需存储其他字段,可新增对应列表,如 registreerimise_aeg_list = []

# 用with管理文件,自动关闭无需手动操作
with open('katastritunnused.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 清理行尾换行、空白字符
        katastritunnus = line.strip()
        # 跳过空行
        if not katastritunnus:
            continue
        # URL模板设置占位符,动态替换地籍号参数
        maaamet_url = 'https://geoportaal.maaamet.ee/url/xgis-ky.php?ky={}&out=json'.format(katastritunnus)
        try:
            # 发起请求,设置超时避免长时间卡住
            response = urllib.request.urlopen(maaamet_url, timeout=10)
            # 直接解析JSON格式返回值
            res_data = json.load(response)
            # 提取pindala字段存入列表
            pindala = res_data.get('pindala')
            if pindala:
                pindala_list.append(pindala)
            # 如需提取其他字段,参照下方写法新增即可
            # other_field = res_data.get('你需要的字段名')
            # if other_field:
            #     对应存储列表.append(other_field)
            print(f"地籍号{katastritunnus}处理完成,pindala值为{pindala}")
        except Exception as e:
            print(f"地籍号{katastritunnus}处理失败,错误信息:{e}")

# 打印最终结果列表
print("所有pindala值汇总列表:", pindala_list)

代码说明

  • 新增异常捕获逻辑,单个地籍号请求失败不会中断整个批量处理流程
  • 使用json模块结构化解析返回数据,比字符串切割的兼容性、稳定性高很多
  • 用with语法管理文件操作,自动释放资源,无需手动写关闭逻辑
  • 提取的字段会自动存入对应列表,全部处理完成后可直接使用列表做后续分析、存储操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:03