使用Javascript将JSON转换为CSV不会给密钥

时间:2018-01-11 18:25:48

标签: javascript json export-to-csv

我已经使用JavaScript将JSON转换为CSV,但是以奇怪的方式,我没有看到标题被转移到CSV文件。我只看到相应的值。

以下是

的示例

1)JSON ....

[
  {
    "entityid": 2,
    "personid": 45676
  }
]

2)JavaScript代码......

function DownloadJSON2CSV(objArray)
    {
        alert(objArray);
        var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

        var str = '';

        for (var i = 0; i < array.length; i++) {
            var line = '';

            for (var index in array[i]) {
                //line += array[i][index] + ',';
            if (line != '') line += ','
                line += array[i][index];


            }

            alert(line);
            // Here is an example where you would wrap the values in double quotes
            // for (var index in array[i]) {
            //    line += '"' + array[i][index] + '",';
            // }

            //line.slice(0,line.Length-1); 

            str += line + '\r\n';
        }

        alert(str);
        window.open( "data:text/csv;charset=utf-8," + escape(str)) 

    }

3)CSV输出....

2,45676

我应该在文档的第一行以CSV格式看到密钥 - entityidpersonid,但我不知道。

2 个答案:

答案 0 :(得分:1)

此代码将从json键中提取标头,此外还会对其中包含逗号的字段加双引号。

function convertToCSV(objArray) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    var str = '';
    var keys = [];
    for(var k in objArray[0]) keys.push(k);
     for (var i = 0; i < keys.length; i++)
     {
         if(i==keys.length-1){str=str+keys[i]+'\r\n'}
             else {str=str+keys[i]+','}
         }
     for (var i = 0; i < array.length; i++) {
        var line = '';
        for (var index in array[i]) {
            if (line != '') line += ','
               if(array[i][index].toString().includes(",") && typeof array[i][index] === 'string'){array[i][index]="\""+array[i][index]+"\""}
                   line += array[i][index];
           }
           str += line + '\r\n';
       }
       return str;
   }

function convertToCSV(objArray) { var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray; var str = ''; var keys = []; for(var k in objArray[0]) keys.push(k); for (var i = 0; i < keys.length; i++) { if(i==keys.length-1){str=str+keys[i]+'\r\n'} else {str=str+keys[i]+','} } for (var i = 0; i < array.length; i++) { var line = ''; for (var index in array[i]) { if (line != '') line += ',' if(array[i][index].toString().includes(",") && typeof array[i][index] === 'string'){array[i][index]="\""+array[i][index]+"\""} line += array[i][index]; } str += line + '\r\n'; } return str; }

用法:(用于Node.js)

var fs = require('fs'); //**run** npm install fs **if not installed yet in cmd**
var arrayOfObjects = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"},{"id":89,"Title":"England"}];
fs.writeFile("./test.csv", convertToCSV(arrayOfObjects));

答案 1 :(得分:0)

您没有将其设置为输出标题行。

function DownloadJSON2CSV(objArray)
    {
        var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

        var str = '';
        var headers = new Array();

        for (var i = 0; i < array.length; i++) {
            var line = '';
            var data = array[i];
            for (var index in data) {
                headers.push(index);
                if (line != '') {
                    line += ','
                }
                line += '"' + array[i][index] + '"';

                console.log('line: ' + line);
            }
            str += line + ((array.length>1) ? '\r\n' : '');
            line = '';
        }

        headers = ArrNoDupe(headers);

        console.log('headers: ' + headers);
        console.log('str: ' + str);
        str = headers + '\r\n' + str;
        console.log('final str: ' + str);
        window.open( "data:text/csv;charset=utf-8," + escape(str));

    }

    function ArrNoDupe(a) {
        var temp = {};
        for (var i = 0; i < a.length; i++)
            temp[a[i]] = true;
        var r = [];
        for (var k in temp)
            r.push(k);
        return r;
    }

CSV输出如此...

ENTITYID,PERSONID

&#34; 2&#34;&#34; 45676&#34;