JSON 2 CSV Converter
Deep JSON to CSV Converter...
by Alex
HTML
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css">
<h1>JSON to CSV Converter</h1>
<p>Paste Your JSON Here:</p>
<textarea id="json" class="form-control" rows="10">
[
{"id":1,"user":{"forename":"Sam", "surname": "Smith"}},
{"id":2,"user":{"forename":"Fred", "surname": "Frankly"}},
{"id":1,"user":{"forename":"Zachary", "surname": "Zupers"}}
]</textarea>
<p>
<button id="convert" class="btn btn-primary">Convert to CSV</button>
<button id="download" class="btn btn-default">Download CSV</button>
</p>
<textarea id="csv" class="form-control" rows="10"></textarea>
CSS
body { margin:20px; font-family: Helvetica; }
p { margin:10px; }
textarea{ width:100%; }
JavaScript
$("#convert").click(function() {
var json = $.parseJSON($("#json").val());
var csv = json2csv(json, PASTE_DELIMITER);
$("#csv").val(csv);
});
$("#download").click(function() {
var json = $.parseJSON($("#json").val());
var csv = json2csv(json, DL_DELIMITER);
window.open("data:text/csv;charset=utf-8," + escape(csv))
});
///###########################################
var DL_DELIMITER = ";";
var PASTE_DELIMITER = "\t";
function quote(val) {
val = String(val);
return '"' + val.replace(/"/g, '""') + '"';
}
function obj2str(obj, delimiter) {
var resp = "";
for (var n in obj) {
if (typeof obj[n] == "object") {
resp += obj2str(obj[n], delimiter);
} else {
resp += "" + quote(obj[n]) + "" + delimiter;
}
}
return resp;
}
function obj2head(obj, delimiter) {
var resp = "";
for (var n in obj) {
if (typeof obj[n] == "object") {
resp += obj2head(obj[n], delimiter);
} else {
resp += "" + quote(n) + "" + delimiter;
}
}
return resp;
}
function json2csv(json, delimiter) {
var head = "";
var csv = "";
if (json.hasOwnProperty('rows')) {
json = json.rows;
}
for (var i in json) { // walks tha array
var obj = json[i];
var line = "";
if (head == "") {
head += obj2head(obj, delimiter);
}
line += "" + obj2str(obj, delimiter);
csv += line + "\n";
}
return head + "\n\n" + csv;
}