将JSON转换为CSV时删除不需要的元素

时间:2018-01-17 02:18:26

标签: javascript json angular csv typescript

我有一组像这样的JSON数据:

{"id":1,"name":"Sam","birthday":"12December","age":"15"},
{"id":2,"name":"Ash","birthday":"12January","age":"23"}

我通过函数传递数据:

ConvertToCSV(data)

现在我可以在csv中获取id,姓名,生日和年龄。但是,我想在转换过程中删除生日列,以便它不会显示在生成的csv中。我怎么能这样做?

当前输出:

id | name | birthday   | age      
1  | Sam  | 12December | 15      
2  | Ash  | 12January  | 23       

期望的输出:

id | name | age
1  | Sam  | 15
2  | Ash  | 23

以下是原始代码:

ConvertToCSV(data) {
        var array = $.parseJSON('[' + data + ']');
        var fields = Object.keys(array[0]);
        var replacer = function(key, value) { return value === null ? '' : value } 
        var csv = array.map(function(row){
            return fields.map(function(fieldname){
                return JSON.stringify(row[fieldname], replacer)
            }).join(',')
        })
        csv.unshift(fields.join(',')) // add header column
        var str = csv.join('\r\n');
        return str;
    }

我根据here将以下内容添加到函数中:

for(var i = array.length - 1; i >= 0; i--) {
    var index = array[i].birthday;
    array[i].splice(index, 1);
}

但是上面的代码不起作用,有人可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

过滤字段以删除“生日”:

var fields = Object.keys(array[0])
  .filter(field => field !== 'birthday');

完整代码(使用原生JSON.parse):

var data = `
{"id":1,"name":"Sam","birthday":"12December","age":"15"},
{"id":2,"name":"Ash","birthday":"12January","age":"23"}
`;

var ConvertToCSV = (data) => {
    var array = JSON.parse('[' + data + ']');
    var fields = Object.keys(array[0]).filter(field => field !== 'birthday');
    var replacer = function (key, value) { return value === null ? '' : value }
    var csv = array.map(function (row) {
        return fields.map(function (fieldname) {
            return JSON.stringify(row[fieldname], replacer)
        }).join(',')
    })
    csv.unshift(fields.join(',')) // add header column
    var str = csv.join('\r\n');
    return str;
};

console.log(ConvertToCSV(data));