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

无法将API调用返回数据导出为CSV的问题求助

问题:API返回JSON转CSV时出现AttributeError错误

我尝试使用以下Python代码将API调用返回的JSON数据导出为CSV文件,但运行时出现错误。

原代码

import requests
import csv
import json

r='http://openapi.seoul.go.kr:8088/504949776872656935396c46496663/json/airPolutionMeasuring1Hour/1/50/'

response=requests.get(r)
output = response.text
jsonresponse=json.loads(output)
with open ('data_02.csv', 'w', newline ='') as csvfile:
    fieldnames=['DATA_DT', 'LOC_CODE', 'ITEM_CODE', 'DATA_VALUE', 'DATA_STATE', 'DATA_NOVER', 'DATA_ROVER', "REGIST_DT"]
    writer=csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for row in jsonresponse:
        writer.writerow(row)

报错信息

Traceback (most recent call last): File "/Users/xxx/PycharmProjects/api_request/export_csv_Test02.py", line 16, in
writer.writerow(row) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/csv.py", line 154, in writerow
return self.writer.writerow(self._dict_to_list(rowdict)) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/csv.py", line 147, in _dict_to_list
wrong_fields = rowdict.keys() - self.fieldnames AttributeError: 'str' object has no attribute 'keys'


错误原因

报错核心是'str' object has no attribute 'keys',原因如下:

  • API返回的JSON是嵌套结构,外层字典包含airPolutionMeasuring1Hour键,其下的row字段才是存储目标数据的字典列表
  • 原代码中for row in jsonresponse是遍历外层字典的键(每个键为字符串类型),而非实际的数据字典,传给writer.writerow()自然报错,因为该方法要求接收字典类型参数

解决方法

  1. 定位实际数据列表:通过json_data['airPolutionMeasuring1Hour']['row']获取存储数据的字典列表
  2. 简化JSON解析:直接使用response.json()替代json.loads(response.text),更高效简洁

修正后的代码

import requests
import csv

url = 'http://openapi.seoul.go.kr:8088/504949776872656935396c46496663/json/airPolutionMeasuring1Hour/1/50/'

response = requests.get(url)
json_data = response.json()
# 定位到实际存储数据的字典列表
data_rows = json_data['airPolutionMeasuring1Hour']['row']

with open('data_02.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['DATA_DT', 'LOC_CODE', 'ITEM_CODE', 'DATA_VALUE', 'DATA_STATE', 'DATA_NOVER', 'DATA_ROVER', "REGIST_DT"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    # 遍历数据字典列表写入CSV
    for row in data_rows:
        writer.writerow(row)

额外添加encoding='utf-8'参数,避免导出CSV时出现中文乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 01:06:40