Javascript 将json值合并在一起并创建csv
我有一个json数据,我想加入,然后创建一个csv文件。json数据如下所示。数据并不总是相同的(就像在第一个json对象中只有两个字段,而在第二个和第三个json对象中有3个字段,但其中一些字段是不同的,实际上,数据是表单输入,可以基于在非强制元素上接收的输入而动态)。 我可以肯定的是,只有一个JSON数组将包含所有JSONJavascript 将json值合并在一起并创建csv,javascript,json,csv,Javascript,Json,Csv,我有一个json数据,我想加入,然后创建一个csv文件。json数据如下所示。数据并不总是相同的(就像在第一个json对象中只有两个字段,而在第二个和第三个json对象中有3个字段,但其中一些字段是不同的,实际上,数据是表单输入,可以基于在非强制元素上接收的输入而动态)。 我可以肯定的是,只有一个JSON数组将包含所有JSON [{"firstName":"Kukreja","lastName":"Ramesh"},{"firstName":"Ram","lastName":"Laxman","
[{"firstName":"Kukreja","lastName":"Ramesh"},{"firstName":"Ram","lastName":"Laxman","dob":"jan-1990"},{"firstName":"Sam","resourceType":"/dmp/formdata","lastName":"Paul"}]
我必须用这些数据创建一个电子表格。因此,列标题应为firstName,所有json对象值(如kureja/Ram/Sam)应显示在单独的行中,其他数据应相应地在列和行中格式化
目前,我正在使用此功能创建csv
function ConvertToCSV(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]) {
if (line != '') line += ','
console.log(array[i][index]);
line += array[i][index];
}
str += line + '\r\n';
}
return str;
}
函数ConvertToCSV(objArray){
var array=typeof objArray!=“object”?JSON.parse(objArray):objArray;
var-str='';
对于(var i=0;i
您可以使用下面的功能
修复了示例!。。。。请再次查看
请参见示例!->
在这个例子中也有一个下载方法
function json2csv(objArray, headers, showHeaders) {
if( typeof headers == "boolean" ){
showHeaders = headers;
headers = null;
}
var itens = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
//separate fields
var fields = {};
if( !headers ){
for(var i = 0; i < itens.length; i++){
for(var prop in itens[i]){
if( !fields[prop] ){
fields[prop] = [];
}
}
}
}else{
headers.forEach(function(header){ fields[header] = []; });
}
//getting data
for(var i = 0; i < itens.length; i++){
for(var prop in fields){
if( typeof itens[i][prop] != "undefined" ){
fields[prop].push( itens[i][prop] );
}else{
fields[prop].push( "" );
}
}
}
//make the csv
var csvLines = [];
if( showHeaders ){
var lineFields = [];
for(var prop in fields){
lineFields.push( prop );
}
var line = lineFields.join(", ");
csvLines.push(line);
}
for(var i = 0; i < itens.length; i++){
var lineFields = [];
for(var prop in fields){
lineFields.push( fields[prop][i] );
}
var line = lineFields.join(", ");
csvLines.push(line);
}
var csvStr = "sep=,\n" + csvLines.join("\n");
return csvStr;
}
函数json2csv(objArray、headers、showHeaders){
如果(标题类型==“布尔”){
showHeaders=标题;
headers=null;
}
var itens=typeof objArray!=“object”?JSON.parse(objArray):objArray;
//独立字段
变量字段={};
如果(!头){
对于(var i=0;i
问题是什么?这就像使用json数据作为输入创建CSV一样简单,但json数据将是动态的,CSV列应以行和列的格式相应地捕获数据我知道这就是您要做的;你发布的代码不是这样做的吗?您遇到的困难是什么?我遇到的问题是,如果json端对不同对象的排序不同,则生成的csv无法正确捕获这些内容,并且没有根据字段类型进行分类,我不确定如何在csv顶部只放置一个标题,应该是您提供的firstName、lastName等可以工作,但我看到我必须显式地提供头,这可以从json本身中选择,但json对象可能会有所不同。此外,我希望标题以csv格式出现,并且低于数据应该出现的格式。对于您提供的代码,只有数据被导出。如果您不提供标题,我将从json动态选取,用3行代码放置标题,我将对您进行修改…这似乎有效。由于我现在不在办公室,我将在以后集成JS并再次更新。谢谢你,伙计:)