2013-03-13 113 views
1

如何將json對象數組轉換爲csv?Javascript/convert json to 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 
+0

[如何將JSON轉換爲CSV格式並存儲在變量中](http://stackoverflow.com/questions/8847766/how-to-convert-json-to-csv-format-and-store -in-a-variable) – jcubic 2013-03-13 09:39:05

+1

在我的函數中,我添加了標題和dateformat支持 – Farandole 2013-03-13 09:45:52

回答

2

實施例的jsfiddle:http://jsfiddle.net/FLR4v/

依賴關係:

功能

/** 
* 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; 
} 
-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; 
} 
+0

如果你解釋爲什麼***代碼解決了這個問題會更好。請看[回答]。 – brasofilo 2014-05-25 08:44:55

0

雖然這是很老的問題,在這裏我節省調查結果未來的研究者。

Javascript現在提供Object.values的功能,它可以將json的所有值拉到數組中,然後可以使用連接將其轉換爲csv。

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

唯一的限制是它仍然不被幾個瀏覽器支持。

+0

僅當您的對象「簡單」時才適用。如果你的jsonrecord包含一個日期時間對象或一個奇怪的對象,什麼object.values會寫。 – Farandole 2017-09-22 19:10:58