JSON.stringify不对整个对象进行字符串化

时间:2018-12-04 21:43:55

标签: javascript json typescript stringify

JSON.stringify(this.workout)不能对整个对象进行字符串化。 workoutWorkout类的对象,如下所示:

export class Workout {
    id: string;
    name: string;
    exercises: Exercise[];
    routine: Routine;
}

练习和例程是另一个具有嵌套数组的类。

问题是JSON.stringify(this.workout)仅返回{"name":"Day 1"}。有什么想法可以解决问题吗?

2 个答案:

答案 0 :(得分:1)

对于要序列化的任何类,可能必须定义to toJSON()方法以确保数据被序列化。否则,只有常规的可枚举属性将最终出现在输出中。

您可能需要在ExerciseRoutine以及Workout上使用它。

另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

答案 1 :(得分:1)

在本示例中使用纯JS可以看到,它可以按预期工作,因此您应该查看代码并确保正确初始化了所有对象。

或者,您也可以在任何这些类中实现自定义toJSON方法,以定义序列化方式(请查看class Routine中的示例):

class Exercises {
  constructor() {
    this.items = [1, 2, 3];
  }
}

class Routine {
  constructor() {
    this.property = 'DATA';
  }
  
  toJSON() {
    return `ROUTINE = ${ this.property }`;
  }
}

class Workout {
  constructor() {
    this.id = 1;
    this.name = 'Foo';
    this.exercises = new Exercises();
    this.routine = new Routine();
  }
}

const workout = new Workout();

console.log(JSON.stringify(workout, null, 4));
.as-console-wrapper {
  max-height: none !important;
}