javascript - Highcharts csv 数据加载并解析为单独的数组和 json

标签 javascript arrays json csv highcharts

这里是第一篇文章,我对 javascript 很陌生,所以希望能正确解释我的问题。我正在尝试将 csv 文件中的数据处理为 JSON 并使用该数据创建 Highcharts 图表,但不知道从哪里开始。我研究了很多答案,但它们似乎并没有完全解决我的问题。我的目标是从位于同一服务器上的 csv 文件生成 Highcharts 堆积面积图。

我现在的 Highcart 代码使用单个数组来表示 x 轴命名类别(本例中为年份): varcategories = ['1850','1900','1950','2000']; 以及数据系列的 JSON:var data = [{ 名称:'线路1', 数据:[116、127、131、143] }, { 名称:'线路2', 数据:[206,217,221,233] }, { 名称:“3号线”, 数据:[303、313、326、338] }]

以前的答案中使用的大多数数据集和图表都使用具有时间序列垂直表示的 csv 文件,其中第二列用于数据。例如去年的每日股价。

但是我计划使用的 data.csv 文件如下所示:

Lines, ‘1850’, ‘1900’, ‘1950’, ‘2000’
Line1, 116, 127, 131, 143
Line2, 206, 217, 221, 233
Line3, 303, 313, 326, 338

我正在考虑使用这样的 $.get 函数:$.get('data.csv', function (csvfile) {//existing code for Create the Chart... } 并创建一个将 csv 数据解析为变量 Data 和变量 Category 的函数。但我不知道如何做到这一点..

基本代码(带有硬编码数据):JSfiddle

有人知道我需要哪些 JavaScript 代码将 CSV 数据解析为 Highcharts 图表的 json/数据吗?

编辑: 我使用此代码通过 ajax 调用读取 csv 数据并处理接收到的数据:

  $(document).ready(function() {
$.ajax({
    type: "GET",
    url: "data.csv",
    dataType: "text",
    success: function(data) {processData(data);}
});
});

function processData(data) {
var table = data.split("\n").map(line => line.split(","));
var categories = table[0].slice(1);
var data = table.slice(1).map(a => ({"name": a[0], "data": a.slice(1)}));
console.log(data);
console.log(categories);};

数据接收正确,但数组由字符串而不是数字组成。我需要修改 processData 函数中的哪一部分才能获取数字数据类型?

最佳答案

假设您的 csv 数据以 "Lines,1850,1900,1950,2000\nLine1,116,127,131,143\nLine2,206,217,221,233\nLine3,303,313,326,338" 的形式到达,以便构建您的类别和数据数组,您可以执行以下操作;

var csvData = "Lines,1850,1900,1950,2000\nLine1,116,127,131,143\nLine2,206,217,221,233\nLine3,303,313,326,338",
      table = csvData.split("\n").map(line => line.split(",")),
 categories = table[0].slice(1),
       data = table.slice(1).map(a => ({"name": a[0], "data": a.slice(1)}));

console.log(categories);
console.log(data);

如果您想以数字类型而不是字符串形式接收数组内容,您可以执行以下操作;

var csvData = "Lines,1850,1900,1950,2000\nLine1,116,127,131,143\nLine2,206,217,221,233\nLine3,303,313,326,338" ,
      table = csvData.split("\n").map(line => line.split(",")),
 categories = table[0].slice(1).map(e=>e*1),
       data = table.slice(1).map(a => ({"name": a[0], "data": a.slice(1).slice(1).map(e=>e*1)}));

console.log(categories);
console.log(data);

关于javascript - Highcharts csv 数据加载并解析为单独的数组和 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350245/

相关文章:

javascript - async/await 转换为 Promise.resolve 然后

c++ - 删除、释放或取消分配?

json - 元组类型 '(key: String, value: AnyObject)' 的值没有成员 'subscript'

javascript - 从 stackexchange 导入 json 文件并使用 Node js (express) 进行打印

javascript - jQuery 通过函数调用检查输入是否有值

php - 验证 .edu 或 .ac 电子邮件地址

javascript - 如何在 VPS 上找到 Node.js Express 站点的 URL?

arrays - Swift 中的构造函数?

javascript - 按自定义数组对 JSON 对象进行排序

Java Jackson 配置日期