我有以下JSON数组,其中id键是一个字符串(呵呵)。
"locations": [
{
"default_currency_id": "17",
"continent": "1",
"country_code": "AL",
"gift_value": "150",
"alert": "TEST",
"caption": "Albania",
"id": "1"
},
我想使用基于模型中定义的值的自动转换,而不是使用Number函数(请参见附件):请问如何以正确的方式?理想情况下,我想将JSON数组放入类型化模型中而无需手动解析(如您在for循环中所见)
export class Location {
default_currency_id: number;
continent: string;
country_code: string;
gift_value: string;
alert: string;
caption: string;
id: number;
}
parseDataset(data: any) {
console.log('parseDataset');
console.log(data);
if(data.locations_gifts != null) {
//this.dataSet.locations = data.locations_gifts;
for(let o of data.locations_gifts){//HOW TO AVOID MANUAL PARSING?
console.log(o);
let item: Location = <Location>{
default_currency_id: Number(o.default_currency_id), //HOW TO AVOID MANUAL CONVERSION?
};
this.dataSet.locations.push(item);
}
}
console.log(this.dataSet)
}
答案 0 :(得分:0)
您不能那样做。 TypeScript可帮助您在开发中而不是在运行时验证代码。因此,动态响应数据的数据转换不在其范围内(至少到现在为止)
答案 1 :(得分:0)
我认为您可以使用JSON.parse()中的reviver
选项
我用它来将JSON日期(字符串)转换为Javascript Date对象
这里的例子:
https://mariusschulz.com/blog/deserializing-json-strings-as-javascript-date-objects
答案 2 :(得分:0)
您可以这样在代码中使用签名来做到这一点:
const sign = {
default_currency_id: "integer",
continent: "string",
country_code: "string",
gift_value: "string",
alert: "string",
caption: "string",
id: "integer"
}
parseDataset(data: any) {
console.log(data);
let dataDecoded:any = {};
Object.keys(this.sign).forEach((key, index) => {
let value = data[index];
if (value) {
switch (this.sign[key]) {
case 'integer':
value = parseInt(value);
break;
default: value = value.toString();
}
dataDecoded[key] = value;
}
});
}