[英]Converting json to csv in javascript, typescript
您好我正在嘗試將一些 json 轉換為 cvs,但我沒有運氣解析它,我找到了一些簡單的 json 的解決方案,看起來像這樣
json = [
{
name: "Anil Singh",
age: 33,
average: 98,
approved: true,
description: "I am active blogger and Author."
},
{
name: 'Reena Singh',
age: 28,
average: 99,
approved: true,
description: "I am active HR."
},
{
name: 'Aradhya',
age: 4,
average: 99,
approved: true,
description: "I am engle."
},
];
我有這樣的方法
convertToCSV(objArray, headerList): string {
const array = typeof objArray !== 'object' ? JSON.parse(objArray) : objArray;
let str = '';
let row = 'S.No,';
// tslint:disable-next-line: forin
for (const index in headerList) {
row += headerList[index] + ',';
}
row = row.slice(0, -1);
str += row + '\r\n';
for (let i = 0; i < array.length; i++) {
let line = (i + 1) + '';
// tslint:disable-next-line: forin
for (const index in headerList) {
const head = headerList[index];
line += ',' + array[i][head];
}
str += line + '\r\n';
}
return str;
}
像這樣稱呼它
const csvData = this.convertToCSV(json, ['name', 'age', 'average', 'approved', 'description']);
我有一個看起來像這樣的復雜 object 的問題
json = [{
"customer": {
"emailAddress": "test@gmail.com"
},
"recommendationProductDetails": [{
"productId": "4288",
"title": "Title 1",
"imageWebAddress": "http://url.com/GetImage/2956",
"webAddress": "http://url.com/",
"description": "Description 23"
}, {
"productId": "8888",
"title": "Title 8",
"imageWebAddress": "http://url.com/GetImage/2333",
"webAddress": "http://url.com/",
"description": "Description 55"
}]
},
{
"customer": {
"emailAddress": "test33@gmail.com"
},
"recommendationProductDetails": [{
"productId": "3333",
"title": "Title 33",
"imageWebAddress": "http://url.com/GetImage/333",
"webAddress": "http://url.com/",
"description": "Description 333"
}, {
"productId": "1111",
"title": "Title 111",
"imageWebAddress": "http://url.com/GetImage/111",
"webAddress": "http://url.com/",
"description": "Description 111"
}]
}
];
有人可以幫助在 cvs 中格式化這個 json,謝謝
將這種復雜的 object 轉換為 CSV 有輕微的解決方法
希望下面的代碼會有所幫助
var jsondata = [{
"customer": {
"emailAddress": "test@gmail.com"
},
"recommendationProductDetails": [{
"productId": "4288",
"title": "Title 1",
"imageWebAddress": "http://url.com/GetImage/2956",
"webAddress": "http://url.com/",
"description": "Description 23"
}, {
"productId": "8888",
"title": "Title 8",
"imageWebAddress": "http://url.com/GetImage/2333",
"webAddress": "http://url.com/",
"description": "Description 55"
}]
},
{
"customer": {
"emailAddress": "test33@gmail.com"
},
"recommendationProductDetails": [{
"productId": "3333",
"title": "Title 33",
"imageWebAddress": "http://url.com/GetImage/333",
"webAddress": "http://url.com/",
"description": "Description 333"
}, {
"productId": "1111",
"title": "Title 111",
"imageWebAddress": "http://url.com/GetImage/111",
"webAddress": "http://url.com/",
"description": "Description 111"
}]
}
];
function flattenObjectKeys(ob) {
var toReturn = {};
for (var i in ob) {
if (!ob.hasOwnProperty(i)) continue;
if ((typeof ob[i]) == 'object' && ob[i] !== null) {
var flatObject = flattenObjectKeys(ob[i]);
for (var x in flatObject) {
if (!flatObject.hasOwnProperty(x)) continue;
toReturn[i + '.' + x] = flatObject[x];
}
} else {
toReturn[i] = ob[i];
}
}
return toReturn;
}
function transformToCSV(jsondata, keysArr=[])
{
var csvData = "";
var itemList = [];
jsondata.forEach(customer=>{
itemList.push(flattenObjectKeys(customer));
})
var newKeysNames = Object.keys(itemList[0]);
var keysMap = {};
newKeysNames.forEach(newKeyName => {
keysArr.forEach((oldKeyName)=>{
let findName = "."+ oldKeyName;
if( String(newKeyName).indexOf(findName) >= 0)
{
keysMap[oldKeyName] = newKeyName;
}
})
});
// console.log("Keys Map === ", keysMap);
itemList.forEach((item)=>{
keysArr.forEach(keyName=>{
csvData+=item[keysMap[keyName]] +",";
})
csvData+='\r\n';
})
return csvData;
}
console.log("====================");
console.log(transformToCSV(jsondata, ['title','webAddress','description']));
console.log("====================");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.