Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套类转换为";生的;json_Json_Angular - Fatal编程技术网

将嵌套类转换为";生的;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,并移除大括号:

这显然假设子对象和父对象的结构是已知的,并且它们是静态的