将嵌套类转换为";生的;json
我有以下课程:将嵌套类转换为";生的;json,json,angular,Json,Angular,我有以下课程: export class Son { public Field8_1 : number; public Field8_2 : number; } export class Father { constructor (){ this.Field8 = new Son; } public Field1 : number; public Field2 : number; public Field3 : numb
export class Son
{
public Field8_1 : number;
public Field8_2 : number;
}
export class Father
{
constructor (){
this.Field8 = new Son;
}
public Field1 : number;
public Field2 : number;
public Field3 : number;
public Field4 : number;
public Field5 : number;
public Field6 : number;
public Field7 : number;
Field8 : Son;
}
我必须用Angular的HttpClient发送它。
所以我跑了:
var body = JSON.stringify(this.Father);
this.http.post (TGT_IP,body).subscribe (...)
我得到的尸体是:
{"Field8":{"Field8_1":81,"Field8_2":82},"Field1":1,"Field2":2,"Field3":3,"Field4":4,"Field5":5,"Field6":6,"Field7":7}
如何“自定义”stringify以根据需要创建字符串:
"Field1":1,"Field2":2,"Field3":3,"Field4":4,"Field5":5,"Field6":6,"Field7","Field8_1":81, "Field8_2":82
我想发送一个“原始”字符串。您可以通过几种方式实现这一点。选项一是使用spread操作符映射父项和子项的所有键,然后删除不需要的字段:
// First option
let mappedFather1 = {
...this.father,
Field8_1: this.father.Field8.Field8_1,
Field8_2: this.father.Field8.Field8_2
};
delete mappedFather1.Field8;
另一个选项是基本上“挑选”所需的对象关键点:
// Second option
let mappedFather2 = {
Field1: this.father.Field1,
Field2: this.father.Field2,
Field3: this.father.Field3,
Field4: this.father.Field4,
Field5: this.father.Field5,
Field6: this.father.Field6,
Field7: this.father.Field7,
Field8_1: this.father.Field8.Field8_1,
Field8_2: this.father.Field8.Field8_2
}
如果您不需要JSON的大括号和大括号,可以按如下方式删除它们:
let noBracesFather = JSON.stringify(mappedFather1).substr(1).slice(0, -1);
下面是一个stackblitz,它将两个选项的输出记录到console,并移除大括号:
这显然假设子对象和父对象的结构是已知的,并且它们是静态的