Javascript 将CSV文件转换为JSON数组JS

Javascript 将CSV文件转换为JSON数组JS,javascript,json,csv,Javascript,Json,Csv,我有一个用于sankey图表的CSV文件,我想用JSON对其进行修改,因为我的函数使用JSON格式,但我需要从CSV中读取 CSV文件如下所示: source,xPos,target,value user1,0,user2,4 user2,1,user3,4 user1,0,user3,2 user5,user4,2 JSON文件格式应该是这样的,这样我的代码就可以读取它了 { "nodes":[ {"node":0,"name":"user0","xPos":0},

我有一个用于sankey图表的CSV文件,我想用JSON对其进行修改,因为我的函数使用JSON格式,但我需要从CSV中读取

CSV文件如下所示:

source,xPos,target,value
user1,0,user2,4
user2,1,user3,4
user1,0,user3,2
user5,user4,2
JSON文件格式应该是这样的,这样我的代码就可以读取它了

{
    "nodes":[
        {"node":0,"name":"user0","xPos":0},
        {"node":1,"name":"user1","xPos":0},
        {"node":2,"name":"user2","xPos":1},
    ],
    "links":[
        {"source":0,"target":2,"value":2},
        {"source":1,"target":2,"value":2},
        {"source":1,"target":3,"value":2},
}

忽略名称和链接,因为示例中的dont mach只是一个示例

要做到这一点没有简单的方法。您需要实现如下所示的自定义逻辑

var csv=“source,xpo,target,value\nuser1,0,user2,4\nuser2,1,user3,4\nuser1,0,user3,2\nuser5,user4,2”;
var json=csv.split('\n').reduce(函数(结果、行、索引){
如果(索引>0){//跳过标题。
var数据=行分割(',');
如果(data.length==4){//跳过列不完整的行。
var containsSourceNode=result.nodes.some(函数(节点){return node.name==data[0];});
如果(!containsSourceNode){
result.nodes.push({
节点:result.nodes.length,
名称:数据[0],
xpos:数据[1]
});
}
var containsTargetNode=result.nodes.some(函数(节点){return node.name==data[2];});
如果(!containsTargetNode){
result.nodes.push({
节点:result.nodes.length,
名称:数据[2],
xpos:数据[1]
});
}
result.links.push({
源:result.nodes.filter(函数(节点){return node.name===data[0];})[0]。节点,
目标:result.nodes.filter(函数(节点){return node.name===data[2];})[0]。节点,
值:数据[3]
});
}
}
返回结果;
}, {
节点:[],
链接:[]
});

document.body.innerHTML=''+JSON.stringify(JSON,null,2)+''您的JSON缺少右大括号。@Polywhill先生,我已经提到过,这只是一个示例,虽然我可以从这个JSON文件中读取,但我无法从CSV中读取。我使用的是d3.csv()@Chis你说不能是什么意思?你遇到了什么错误?@Craicerjack这是我如何读取JSON文件
d3.JSON(“sankey.JSON”,函数(error,graph){window.width=1200;//确定dra sankey.nodes(graph.nodes).links(graph.links).layout(32)的宽度
我需要将其转换为从CSVDo读取的数据。您想在客户端或服务器端将CSV转换为Json吗?您还可以在客户端或服务器端创建一个节点缓存以进行快速查找。这可以很好地工作,但如果我有一个外部CSV文件,我需要将其与“d3.CSV(filename.CSV)”链接“这该怎么办呢?”您的原始数据不太容易转换为JSON。我认为您不能在这种情况下使用库。您最好在服务器上将其预处理为JSON。然后,您可以将其加载到
d3.JSON()
。这太复杂了。