将CSV文件转换为JSON数组JS
Converting CSV file to JSON Array JS
我有一个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},
}
忽略名字和链接,因为例子中没有,但这只是一个例子。
没有简单的方法可以做到这一点。您需要实现如下所示的自定义逻辑。
var csv = "source,xPos,target,value'nuser1,0,user2,4'nuser2,1,user3,4'nuser1,0,user3,2'nuser5,user4,2";
var json = csv.split(''n').reduce(function(result, line, index) {
if (index > 0) { // Skip header.
var data = line.split(',');
if (data.length === 4) { // Skip rows with incomplete columns.
var containsSourceNode = result.nodes.some(function(node) { return node.name === data[0]; });
if (!containsSourceNode) {
result.nodes.push({
node : result.nodes.length,
name : data[0],
xpos : data[1]
});
}
var containsTargetNode = result.nodes.some(function(node) { return node.name === data[2]; });
if (!containsTargetNode) {
result.nodes.push({
node : result.nodes.length,
name : data[2],
xpos : data[1]
});
}
result.links.push({
source : result.nodes.filter(function(node) { return node.name === data[0]; })[0].node,
target : result.nodes.filter(function(node) { return node.name === data[2]; })[0].node,
value : data[3]
});
}
}
return result;
}, {
nodes : [],
links : []
});
document.body.innerHTML = '<pre>' + JSON.stringify(json, null, 2) + '</pre>';
使用缓存的示例
var csv = "source,xPos,target,value'nuser1,0,user2,4'nuser2,1,user3,4'nuser1,0,user3,2'nuser5,user4,2";
var json = csv.split(''n').reduce(function(result, line, index) {
if (index > 0) { // Skip header.
var data = line.split(',');
if (data.length === 4) { // Skip rows with incomplete columns.
var containsSourceNode = result.cache[data[0]] != null;
if (!containsSourceNode) {
result.nodes.push(result.cache[data[0]] = {
node : result.size++,
name : data[0],
xpos : data[1]
});
}
var containsTargetNode = result.cache[data[2]] != null;
if (!containsTargetNode) {
result.nodes.push(result.cache[data[2]] = {
node : result.size++,
name : data[2],
xpos : data[1]
});
}
result.links.push({
source : result.cache[data[0]].node,
target : result.cache[data[2]].node,
value : data[3]
});
}
}
return result;
}, {
nodes : [],
links : [],
cache : {},
size : 0
});
delete json.cache;
delete json.size;
document.body.innerHTML = '<pre>' + JSON.stringify(json, null, 2) + '</pre>';
相关文章:
- 需要帮助设置json数组
- 如何使用 node.js 比较两个 json 数组
- 根据id将json数组组合为一个json数组
- 如何创建JSON数组
- 如何将package.json数组传递给grunt.js
- 访问json数组中的对象
- JSON数组数据返回Undefined
- 如何向JSON数组动态添加属性
- 如何从json数组中获取特定值
- 从多维嵌套json数组创建下拉列表
- 在ListView中添加JSON数组中存储的图像-ReactNative
- jquery在json数组中循环
- 将 JSON 数组解析为 JavaScript 数组
- 如何在php中读取没有任何键的JSON数组
- 如何在Jquery中迭代JSON数组
- 如何在cycle js中从JSON数组创建组件
- 如何使用jquery返回php-json数组对象
- JSON数组转换为JS对象数组
- 使用System从C#集合创建JSON数组.网状物剧本序列化
- 使用Underscore.js修改json数组中所选元素的更有效方法