在现代web开发中,从外部api获取数据是常见的任务。当api返回的数据格式为csv时,我们需要特定的工具来解析它,并确保数据能够正确地映射到我们定义的变量中。本教程将以一个具体的案例为例,详细介绍如何使用javascript和papaparse库从csv api获取学校信息,解析数据,并解决变量填充不正确的问题。
首先,我们需要一个基本的HTML页面来承载用户输入和触发数据获取的按钮,并引入PapaParse库来处理CSV数据。
获取学校信息
在上述HTML中,我们创建了一个文本输入框 (schoolName) 用于接收用户输入的学校名称,一个按钮 (Get Information) 来触发数据获取函数,并引入了PapaParse库。
getSchoolInformation 函数是整个流程的入口点。它负责从用户界面获取学校名称,并向指定的CSV API发起fetch请求。
// Function to retrieve school information
function getSchoolInformation() {
let schoolName = document.getElementById("schoolName").value;
console.log("尝试获取的学校名称:", schoolName); // 调试输出,检查输入值
// 使用 fetch API 从 CSV 文件获取数据
fetch('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2025/2025-03-10/tuition_cost.csv')
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text(); // 将响应体解析为纯文本
})
.then(csvData => {
// 成功获取 CSV 文本后,调用 findSchoolInformation 进行解析和筛选
let schoolInfo = findSchoolInformation(schoolName, csvData);
displaySchoolInformation(schoolInfo); // 显示结果
})
.catch(error => {
console.error('获取或解析数据时发生错误:', error); // 错误处理
});
}要点:
findSchoolInformation 函数是核心部分,它接收原始CSV数据和用户输入的学校名称,然后使用PapaParse解析CSV,并根据学校名称筛选出相关信息。
解决变量填充问题的关键在于:确保在访问CSV数据时使用的列名与CSV文件头中的实际列名完全一致。
// Function to find school information based on school name
function findSchoolInformation(schoolName, csvData) {
// 使用 PapaParse 解析 CSV 数据
let parsedData = Papa.parse(csvData, {
header: true, // 将第一行作为列头,生成对象数组
skipEmptyLines: true // 跳过空行
}).data;
let schoolInfo = []; // 用于存储找到的学校信息
// 调试输出:检查解析后的数据结构和列名
if (parsedData.length > 0) {
console.log('解析后的第一行数据示例:', parsedData[0]);
// 开发者应根据此输出确认正确的列名
}
parsedData.forEach(function(row) {
// !!! 关键修正点:使用 CSV 文件中实际的列名 !!!
// 原始 CSV 文件的列名是 "name", "degree_length", "in_state_tuition"
let collegeName = row.name; // 使用点符号访问,更简洁
let degreeLength = row.degree_length;
let tuitionCost = row.in_state_tuition;
// 筛选条件:学校名称存在且与用户输入匹配(不区分大小写)
if (collegeName && collegeName.toLowerCase() === schoolName.toLowerCase()) {
// 对获取到的数据进行类型转换
// 注意:这里将 collegeName 转换为小写是为了存储,如果需要原始大小写,则不应转换
// collegeName = collegeName.toLowerCase();
degreeLength = parseInt(degreeLength);
tuitionCost = parseFloat(tuitionCost);
// 确保转换后的数值有效
if (!isNaN(degreeLength) && !isNaN(tuitionCost)) {
schoolInfo.push({
collegeName: collegeName, // 存储原始或转换后的名称,取决于需求
degreeLength: degreeLength,
tuitionCost: tuitionCost
});
}
}
});
console.log('筛选到的学校信息:', schoolInfo); // 调试输出,检查筛选结果
return schoolInfo;
}要点解析:
displaySchoolInformation 函数负责将找到的学校信息输出到控制台。
// Function to display school information in the console
function displaySchoolInformation(schoolInfo) {
if (schoolInfo.length === 0) {
console.log("未找到匹配的学校信息。");
return;
}
for (let i = 0; i < schoolInfo.length; i++) {
let collegeName = schoolInfo[i].collegeName;
let degreeLength = schoolInfo[i].degreeLength;
let tuitionCost = schoolInfo[i].tuitionCost;
console.log("学校名称: " + collegeName);
console.log("学制长度: " + degreeLength);
console.log("学费 (州内): $" + tuitionCost.toFixed(2)); // 格式化为两位小数
console.log("------------------------------");
}
}要点:
将上述所有JavaScript代码整合到HTML文件的
获取学校信息
通过遵循本教程的步骤和建议,您将能够更有效地从CSV API获取、解析和处理数据,避免常见的变量填充错误,并构建出更加稳定和可靠的Web应用程序。
# javascript
# java
# html
# js
# git
# ajax
# github
# 浏览器
# 工具
# csv
# html文件
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
如何使用Golang实现容器安全扫描_Golang Docker镜像漏洞检测方法
Win10怎样清理C盘阿里旺旺缓存_Win10清理阿里旺旺缓存步骤【步骤】
如何使用Golang安装依赖库_管理模块和第三方包
Win10怎么创建桌面快捷方式 Win10为应用创建快捷方式【步骤】
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
Win10怎么卸载鲁大师_Win10彻底卸载鲁大师方法【步骤】
Python网络异常模拟_测试说明【指导】
Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
Win11如何设置开机自动联网 Win11宽带连接自动拨号【步骤】
用Python构建微服务架构实践_FastAPI与Django对比详解
MAC如何修改默认应用程序_MAC文件后缀关联设置与打开方式更改【教程】
C#怎么使用委托和事件 C# delegate与event编程方法
如何在 Go 中判断变量是否为函数类型
Python项目维护经验_长期演进说明【指导】
Win11怎么关闭任务栏小组件_Windows11隐藏任务栏天气图标
Win11怎么设置开机密码_Windows11账户登录选项PIN码
Python脚本参数接收_sys与argparse解析【指导】
Win10如何更改任务栏高度_Windows10解锁任务栏调整大小
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
c++中explicit(bool)的用法 c++条件性explicit【C++20】
c++如何实现多态性_c++ 虚函数表原理与动态绑定机制【教程】
Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】
为什么Go需要go mod文件_Go go mod文件作用说明
Python lxml的etree和ElementTree有什么区别
如何使用Golang sync.Map实现并发安全map_避免锁竞争
Win11怎么查看电脑配置_Win11硬件配置详细查询方法【详解】
Win11怎么更改管理员名字 Win11修改账户名称详细步骤【教程】
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】
短链接怎么自定义还原php_修改解码规则适配需求【汇总】
Windows服务无法启动错误1067是什么_进程意外终止的解决方法
Golang如何实现基本的用户注册_Golang用户注册表单处理示例
Windows电脑键盘突然失灵怎么办?(驱动与硬件排查)
php嵌入式需要什么环境_搭建php+linux嵌入式开发环境【详解】
php会话怎么开启_session_start函数的作用与使用时机【方法】
如何使用Golang管理模块版本_Golanggo mod tidy与升级方法
Python路径拼接规范_跨平台处理说明【指导】
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Go 中实现 Python urllib.quote() 功能的等效方法
Win11如何设置开机问候语 Win11修改登录界面提示【技巧】
Win10任务栏天气和资讯怎么关闭 Win10禁用新闻和兴趣功能【教程】
php订单日志怎么记录发货_php记录订单发货操作日志指南【指南】
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
如何在Golang中处理数据库事务错误_回滚和日志记录
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
作用域操作符会影响性能吗_php静态调用性能分析【教程】
php下载安装包怎么选_threadsafe与nts版本差异【解答】
Win11快速助手怎么用_Win11远程协助连接教程【工具】
2025-10-22
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。