我已经使用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格式看到密钥 - entityid
和personid
,但我不知道。
答案 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;