转换为JSON时,对象属性消失

时间:2017-07-20 15:55:33

标签: javascript json typescript

这是我的班级:

export class Patient {
constructor(public id: number, public name: string, public location: string, public bedId: number, public severity: string,
public trajectory: number, public vitalSigns: [GraphData[]], public latestReading: GraphData[]){
}
 public get getCombinedVSData(): Array<GraphData>{
    let combinedVitalSigns: GraphData[] = [];
    for (let data of this.vitalSigns){
        combinedVitalSigns.push(data[0]);
    }
    return combinedVitalSigns;
}

}

当我打印我的一位病人时,

console.log(this.patientService.patients[0]);

我明白了:

enter image description here

在我的应用程序中,我需要将患者转换为JSON以通过拖放移动它:

let thisIsNotFine=JSON.stringify(this.patientService.patients[0]);

这就是问题所在。当我将它转换回JS对象并打印时,

console.log(JSON.parse(thisIsNotFine));

我明白了:

enter image description here

正如您所看到的,它在控制台中不再被称为Patient,并且getCombinedVSData getter已经消失。

这是正常行为吗?将它转换为JSON时,如何在对象上保留getter?谢谢。

1 个答案:

答案 0 :(得分:2)

JSON docs开始,JSON不能包含函数,因此您的方法不会被解析为JSON。有效数据类型是字符串,数字,对象,数组,true,false和null。

以下是json.stringify()json.parse()从对象中删除方法的示例:

var obj = {
	"prop" : "value",
    "method" : function( num ){
    	return num + 1;
    }
};

var json = JSON.stringify( obj );

var new_obj = JSON.parse( json );

Object.keys( new_obj ).forEach(function(key){
	console.log( key + " : " + new_obj[key]  );
});