我正在使用来自Web服务的JSON,并且该结构具有所有键名,单词之间有空格。
示例:
"Payment": {
"seller name": "Seller Name",
"currency": "USD",
"pending amount": "400.78",
"total amount": "699.44"
}
如您所见,“卖方名称”,“待处理金额”:和“总计”中都有空格。如何将这些键名转换为类似这样的内容:
“卖家名称” =“卖家名称”。
我有一个包含800个条件相同的对象的数组,我需要找到一种有效的方法来做到这一点。
我尝试过:
loadedData是来自ERP的JSON,而mapedList是具有正确格式的对象列表。
let mappedReport: reportERP;
for (let i = 0; i < this.loadedData; i++) {
mappedReport = {
seller_name : this.loadedData[i]['seller name'],
currency: this.loadedData[i]['currency'],
pending_amount: this.loadedData[i]['pending amount'],
total_amount: this.loadedData[i]['total amount']
};
this.mappedList.push(mappedReport);
}
答案 0 :(得分:1)
实际上我的一个朋友也在处理这种情况, 看看这个解决方案https://stackblitz.com/edit/beautify-keynames 我只是寻找对象的所有属性,并为此替换所有空格(在这种情况下),然后将其全部分割并用下划线加入。然后,如果属性的值是一个对象,则每次找到一个对象值时,我都会递归调用它自己
答案 1 :(得分:0)
这是一个TypeScript示例,用下划线替换每个空白字符:
const input = [{
"seller name": "Seller Name",
"currency": "USD",
"pending amount": "400.78",
"total amount": "699.44"
}];
const output = input.map((obj: any) =>
Object.getOwnPropertyNames(obj).reduce((acc: any, key) => {
acc[key.replace(/\s/g, "_")] = obj[key];
return acc;
}, {})
);
演示:
const input = [{
"seller name": "Seller Name",
"currency": "USD",
"pending amount": "400.78",
"total amount": "699.44"
}];
const output = input.map(obj =>
Object.getOwnPropertyNames(obj).reduce((acc, key) => {
acc[key.replace(/\s/g, "_")] = obj[key];
return acc;
}, {})
);
console.log(output);
如果要修改原始对象而不创建对象的副本,则可以使用以下代码段:
input.forEach((obj: any) => {
Object.getOwnPropertyNames(obj).forEach(key => {
const convertedKey = key.replace(/\s/g, "_");
if (convertedKey !== key) {
obj[convertedKey] = obj[key];
delete obj[key];
}
});
});