如何创建统计含指定搜索条件JSON记录数的Python API?
解决思路与修正代码
一、现有代码的问题
- 函数参数
technology被错误覆盖为df['Key Skills'],丢失了搜索关键词 - 请求API时传入整列数据作为参数,不符合API接收逻辑
requests.get返回的Response对象没有.count()方法,无法直接统计KeyError大概率是API返回的JSON结构中不存在'Key Skills'字段,或读取时未正确解析嵌套结构
二、API端实现(Flask为例)
先搭建正确的API服务,负责接收搜索关键词,读取数据后统计符合条件的记录数:
from flask import Flask, request, jsonify import pandas as pd app = Flask(__name__) # 替换为你的实际数据源(可从文件/数据库读取) data = { "Job ID": [1, 2, 3], "Key Skills": ["Python, SQL", "Java, Python", "C++, JavaScript"] } df = pd.DataFrame(data) @app.route('/data', methods=['GET']) def count_jobs_by_skill(): # 获取请求中的搜索关键词 skill = request.args.get('skill', '') if not skill: return jsonify({"error": "请提供搜索关键词"}), 400 # 模糊匹配'Key Skills'列,类似SQL的%str%逻辑 matching_count = df['Key Skills'].str.contains(skill, case=False, na=False).sum() return jsonify({"skill": skill, "count": int(matching_count)}) if __name__ == '__main__': app.run(host='127.0.0.1', port=5000, debug=True)
三、客户端调用修正(Jupyter Notebook中)
修正你的调用代码,正确请求API并获取统计结果:
import requests api_url = "http://127.0.0.1:5000/data" def get_number_of_jobs_T(technology): params = {"skill": technology} r = requests.get(api_url, params=params) result = r.json() if "error" in result: return f"错误: {result['error']}" return f"包含技能'{technology}'的职位数量: {result['count']}" # 调用示例 print(get_number_of_jobs_T("Python"))
四、关键知识点说明
- 模糊搜索:用
pandas.Series.str.contains()实现类似%str%的模糊匹配,case=False忽略大小写,na=False排除空值干扰 - 参数传递:通过
request.args.get()获取URL查询参数,确保参数传递逻辑正确 - 结果统计:用
.sum()统计布尔序列中True的数量,即匹配成功的记录数
内容的提问来源于stack exchange,提问作者indy
相关产品推荐
相关产品推荐

