Javascript excel文件到json的转换
我正在尝试将包含两列的excel文件转换为Json文件。然而,我想保持层次结构,以及一些如何。例如,在下面的excel文件中,我希望json以这样的方式形成一个层次结构,“Charles Johnson”是根值,与他关联的大小是5395。同样,在第二排,“唐纳德·威廉姆斯”在“查尔斯·约翰逊”下工作,他的尺码是3057。以此类推,文件每行中的姓氏将其连接到其父节点。我想使用.split(-)函数。我在这方面已经坚持了很长一段时间,直到最后放弃了:/非常感谢您的帮助:) 所需输出类型:Javascript excel文件到json的转换,javascript,json,Javascript,Json,我正在尝试将包含两列的excel文件转换为Json文件。然而,我想保持层次结构,以及一些如何。例如,在下面的excel文件中,我希望json以这样的方式形成一个层次结构,“Charles Johnson”是根值,与他关联的大小是5395。同样,在第二排,“唐纳德·威廉姆斯”在“查尔斯·约翰逊”下工作,他的尺码是3057。以此类推,文件每行中的姓氏将其连接到其父节点。我想使用.split(-)函数。我在这方面已经坚持了很长一段时间,直到最后放弃了:/非常感谢您的帮助:) 所需输出类型: {
{
"name": "flare",
"children": [{
"name": "analytics",
"children": [{
"name": "cluster",
"children": [{
"name": "AgglomerativeCluster",
"size": 3938
}, {
"name": "CommunityStructure",
"size": 3812
}, {
"name": "HierarchicalCluster",
"size": 6714
}, {
"name": "MergeEdge",
"size": 743
}]
}
}]]
}
解析每一行时必须使用递归。假设始终有两个制表符分隔的列,并且只有一个根,则代码可能如下所示:
//example data
var str = "Charles Johnson\t4184\nCharles Johnson-Donald Williams\t8385\nCharles Johnson-Donald Williams-Daniel Fertig\t428\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling\t1091\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling-Jim Cooke\t318";
var lines = str.split("\n");
var name_ = lines[0].split("\t")[0];
var val_ = lines[0].split("\t")[1];
var obj = {name: name_,
children: [],
value: val_};
//process all lines
for (var i=1;i<lines.length;i++) {
var addr = lines[i].split("\t")[0].split("-");
var val = lines[i].split("\t")[1];
var local_obj = obj;
var recursive_obj;
for (var j=1;j<addr.length;j++) {
recursive_obj = null;
for (var k=0;k<local_obj.children.length;k++) {
if (local_obj.children[k].name==addr[j]) {
recursive_obj=local_obj.children[k];
}
}
if (recursive_obj==null) {
recursive_obj = {name: addr[j],
children: [],
value: null
};
local_obj.children.push(recursive_obj);
}
local_obj=recursive_obj;
}
recursive_obj.value=val;
}
//print a json result
alert(JSON.stringify(obj));
//示例数据
var str=“查尔斯·约翰逊\t4184\nCharles Johnson Donald Williams\t8385\nCharles Johnson Donald Williams Daniel Fertig\t428\nCharles Johnson Donald Williams Daniel Fertig Lino Walling\t1091\nCharles Johnson Donald Williams Daniel Fertig Lino Walling Jim Cooke\t318”;
变量行=str.split(“\n”);
变量名称=行[0]。拆分(“\t”)[0];
var val_=行[0]。拆分(“\t”)[1];
var obj={name:name_389;,
儿童:[],
值:val};
//处理所有线路
对于(var i=1;如果你的示例中有缩进,你提到你的excel文件有两列,我看到的是一行,列在哪里?有没有办法我可以在这里附加一个excel文件,数字部分是第二列,但当我简单地从excel复制粘贴时它就变成了一列哦,好的,修复了。缩进修复了,正如你所说的那样..@gawi,有什么办法可以做到这一点吗?@gawi..非常感谢兄弟…我想我可以用你的代码来实现这一点…感谢你的及时回复和帮助:)@Gawi,我刚刚在jsonlist.com上检查了输出不是有效的json格式:/…它为的最后一个值提供了一个错误size@KhanJSON.stringify是javascript的标准JSON转换器,因此您应该获得正确的JSON字符串,确切的错误是什么?@Gawi…对迟来的答复表示歉意..我想我对字符串进行了一点编辑,这样就可以了给出了一个错误,但是我正试图实现上述所需的输出..它是类似flare.json的格式。请告诉我是否可以以某种方式将其转换为flare.json格式,因为我将在D3可视化中使用此json文件..如果您认为需要修改输入文件以实现flare.json格式,那么我将我也同意,但我现在不知道该怎么做……非常感谢你的帮助:)
//example data
var str = "Charles Johnson\t4184\nCharles Johnson-Donald Williams\t8385\nCharles Johnson-Donald Williams-Daniel Fertig\t428\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling\t1091\nCharles Johnson-Donald Williams-Daniel Fertig-Lino Walling-Jim Cooke\t318";
var lines = str.split("\n");
var name_ = lines[0].split("\t")[0];
var val_ = lines[0].split("\t")[1];
var obj = {name: name_,
children: [],
value: val_};
//process all lines
for (var i=1;i<lines.length;i++) {
var addr = lines[i].split("\t")[0].split("-");
var val = lines[i].split("\t")[1];
var local_obj = obj;
var recursive_obj;
for (var j=1;j<addr.length;j++) {
recursive_obj = null;
for (var k=0;k<local_obj.children.length;k++) {
if (local_obj.children[k].name==addr[j]) {
recursive_obj=local_obj.children[k];
}
}
if (recursive_obj==null) {
recursive_obj = {name: addr[j],
children: [],
value: null
};
local_obj.children.push(recursive_obj);
}
local_obj=recursive_obj;
}
recursive_obj.value=val;
}
//print a json result
alert(JSON.stringify(obj));