如何将Python代码运行输出的JSON结果导出为CSV文件
实现CSV导出的代码修改方案
现有代码问题修复
现有代码本身存在几处逻辑错误,需先修正才能正常获取接口数据:
- 接口请求函数中f字符串拼接错误,
CLIENT_SECRET变量拼写为错误的CLIENT_SECRECT,导致变量无法正确替换到请求地址中 - 四次接口请求的结果被反复覆盖,仅会保留最后一次请求的返回数据
- 末尾两行
response_api = requests.get(data)逻辑错误,此时data已经是接口返回的字典结构,不需要重复发起请求
需补充的核心逻辑
在修复上述问题的基础上,补充3部分逻辑即可实现CSV导出:
- 定义容器存储所有位置的场地查询结果,避免数据被覆盖
- 解析返回的JSON结构,提取
response.venues下的场地明细字段,可按需选择要导出的字段 - 调用pandas内置的
to_csv()方法将结构化数据导出为CSV文件
修改后完整可运行代码
import requests import pandas as pd payload = {} headers = {} CLIENT_ID = "****" CLIENT_SECRET = "****" TOKEN = "****" # 把所有查询坐标存入列表方便循环调用 ll_list = [ "18.036442,42.492103", "18.036808,42.117917", "18.458814,42.485903", "18.453989,42.115408" ] def make_request(payload, headers, ll, CLIENT_ID,CLIENT_SECRET, TOKEN): # 修正f字符串写法和变量拼写错误 url = f"https://api.foursquare.com/v2/venues/search?client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&token={TOKEN}&ll={ll}&intent=browse&radius=10000&v=20210927" response = requests.request("GET", url, headers=headers, data=payload) return response.json() # 定义空列表存储所有场地数据 all_venues = [] for ll in ll_list: res_data = make_request(payload, headers, ll, CLIENT_ID, CLIENT_SECRET, TOKEN) # 提取场地数据,可根据需求调整要提取的字段 if "response" in res_data and "venues" in res_data["response"]: venues = res_data["response"]["venues"] for v in venues: venue_info = { "场地ID": v["id"], "场地名称": v["name"], "纬度": v["location"]["lat"], "经度": v["location"]["lng"], "地址": v["location"].get("address", ""), "分类": v["categories"][0]["name"] if v["categories"] else "" } all_venues.append(venue_info) # 转DataFrame导出为CSV df = pd.DataFrame(all_venues) # index=False表示不导出pandas默认的行号,encoding用utf_8_sig避免打开CSV时乱码 df.to_csv("foursquare场地查询结果.csv", index=False, encoding="utf_8_sig")
运行代码后会在当前脚本同级目录生成名为foursquare场地查询结果.csv的文件,你可以根据实际需求调整venue_info中要提取的字段。
内容的提问来源于stack exchange,提问作者hestaru
相关产品推荐
相关产品推荐

