Javascript / 将 json 转换为 csv

Posted

技术标签:

【中文标题】Javascript / 将 json 转换为 csv【英文标题】:Javascript / convert json to csv 【发布时间】:2013-03-01 03:57:37 【问题描述】:

如何将 json 对象数组转换为 csv?

[ name: "Item 1", color: "Green", size: "X-Large" ,
  name: "Item 2", color: "Green", size: "X-Large" ,
  name: "Item 3", color: "Green", size: "X-Large" ];

name;color;size
Item 1;Green;X-Large
Item 2;Green;X-Large
Item 3;Green;X-Large

【问题讨论】:

How to convert JSON to CSV format and store in a variable的可能重复 在我的函数中,我添加了标题和支持日期格式 【参考方案1】:

尽管这是一个相当老的问题,但将我的发现保存在这里以供未来的研究人员使用。

javascript 现在提供 Object.values 的功能,可以将 json 的所有值拉到一个数组中,然后可以使用 join 将其转换为 csv。

var csvrecord = Object.keys(jsonarray[0]).join(',') + '\n'; 
jsonarray.forEach(function(jsonrecord) 
   csvrecord += Object.values(jsonrecord).join(',') + '\n';
);

唯一的限制是一些浏览器仍然不支持它。

【讨论】:

这仅在您的对象“简单”时才有效。如果你的 jsonrecord 包含一个 datetime 对象或者一个 bizarre 对象,object.values 会写什么。【参考方案2】:
function getCSVFromJson(k)

var retVal=[];
k.forEach(function(a)
var s=''; 
for(k in a)
    s+=a[k]+';';
   

retVal.push(s.substring(0,s.length-1));
);
return retVal;

【讨论】:

最好解释一下为什么你的代码可以解决问题。请参阅How to Answer。【参考方案3】:

JSFiddle 中的示例:http://jsfiddle.net/FLR4v/

依赖:

下划线http://underscorejs.org/underscore-min.js Momentjs http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js

功能

 /**
 * Return a CSV string from an array of json object
 *
 * @method JSONtoCSV
 * @param Object jsonArray an array of json object
 * @param String [delimiter=;] delimiter
 * @param String [dateFormat=ISO] dateFormat if a date is detected
 * @return String Returns the CSV string
**/
function JSONtoCSV(jsonArray, delimiter, dateFormat)
    dateFormat = dateFormat || 'YYYY-MM-DDTHH:mm:ss Z'; // ISO
    delimiter = delimiter || ';' ;

    var body = '';
    // En tete
    var keys = _.map(jsonArray[0], function(num, key) return key; );
    body += keys.join(delimiter) + '\r\n';
    // Data
    for(var i=0; i<jsonArray.length; i++)
        var item = jsonArray[i];
        for(var j=0; j<keys.length; j++)
            var obj = item[keys[j]] ;
            if (_.isDate(obj))                 
                body += moment(obj).format(dateFormat) ;
             else 
                body += obj ;
            

            if (j < keys.length-1)  
                body += delimiter; 
            
        
        body += '\r\n';
    

    return body;

【讨论】:

以上是关于Javascript / 将 json 转换为 csv的主要内容,如果未能解决你的问题,请参考以下文章

JSON.stringify 将 Infinity 转换为 null

如何在不转换为json的情况下将C#数组用于javascript数组?

将json转换为数组

将嵌套 JSON 转换为平面 JSON

如何将 .NET 日期时间转换为 JSON

使用 Javascript 将 XML 转换为 JSON(并返回)