无法正确地将复杂对象数组转换为CSV

时间:2019-07-14 18:20:51

标签: javascript typescript csv

我有一个复杂对象数组,其中可能包含更多对象数组。我想将它们转换为CSV文件。只要有对象列表,数据就会解析为[object Object]。例如,如果一个人有两封电子邮件,我想以两行打印这些电子邮件,以此类推,针对每个对象。地址可以连接到一个字符串,例如“法国,巴黎,someStreet 15”。

代码在此pen中。

以下是数据:

var names = [
        {
          Name: [{First: "Peter", Last:"john"}],
          WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
          Age: 33.45,
          Adress: [{Country:"UK", city: "London", street:"Oak", strtNumber:16},
                  {Country:"Italy", city: "MIlan", street:"Zabin", strtNumber:2}]
        },
        {
            Name: [{First: "jack", Last:"Smith"}],
          WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
            Age: 30,
          Adress: [{Country:"Portugal", city: "Lisbon", street:"crap", strtNumber:144},
                  {Country:"Greece", city: "Athenes", street:"Hercules", strtNumber:55}]
        },
        {
            Name: [{First: "jon", Last:"snow"}],
          WorkPlace: [{Company: "Intel", emails: ["jack@intell.com","admin@intell.com"]}],
            Age: 50,
          Adress: [{Country:"Middle earth", city: "Winterfell", street:"raven", strtNumber:4345},
                  {Country:"Narnia", city: "Jacksonvile", street:"Great crap", strNumber:34}]
        },
    ];

现在这是输出:

enter image description here

2 个答案:

答案 0 :(得分:0)

该错误在您的converArrayOfObjectsToCSV方法内部,因为“ item [key]”的结果是一个数组(在“ Name”的情况下),您需要进一步指定如何处理此数组,否则只会被写到[object Object]。 您将必须使用item [key] [index]访问该元素,并对其属性进行迭代,并在需要时打印它们。

答案 1 :(得分:0)

[对象对象] 表示数据需要进一步转换才能获得所需的输出。

这是经过更新的CodePen,其中包含示例转换。

提供的转换例程使用 Object.values()转换所有数据:

function parseArrayOfObjects(arrayOfObj){
  return arrayOfObj.map(item => 
    Object.values(item).join(" ")) // convert each array item to it's values
    .join(" ") // convert final array to string
    .replace(",", " "); // remove any commas to preserve csv format
}

当然,您的需求可能会决定其他转化,因此请根据需要进行调整。