Javascript excel文件到json的转换

Javascript excel文件到json的转换,javascript,json,Javascript,Json,我正在尝试将包含两列的excel文件转换为Json文件。然而,我想保持层次结构,以及一些如何。例如,在下面的excel文件中,我希望json以这样的方式形成一个层次结构,“Charles Johnson”是根值,与他关联的大小是5395。同样,在第二排,“唐纳德·威廉姆斯”在“查尔斯·约翰逊”下工作,他的尺码是3057。以此类推,文件每行中的姓氏将其连接到其父节点。我想使用.split(-)函数。我在这方面已经坚持了很长一段时间,直到最后放弃了:/非常感谢您的帮助:) 所需输出类型: {

我正在尝试将包含两列的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));