与ES6类和JSON交换数据

时间:2015-11-08 23:58:40

标签: javascript json oop ecmascript-6

我试图找到一种使用JSON和ES6类交换数据的方法。

假设我有以下ES6类定义:

export default class Point {
    constructor(data = {}) {
        Object.assign(this, data);
    }
    get x() { return this._x; }
    set x(val) { this._x = val; }
    get y() { return this._y; }
    set y(val) { this._y = val; }
}

以下对象实例:

let jsonIn = JSON.parse("{"x": "34", "y": "28"}");
let myPoint = new Point(jsonIn);

检查后,myPoint将正确地拥有两个"内部"名为_x_y的属性分别设置为34和28。因此,从JSON到ES6类实例的对象水合是可能的。

但是,如果我现在尝试将此实例序列化为JSON:

let myJson = JSON.stringify(myPoint);

我得到以下内容:

> "{"_x":"34","_y":"28"}"

将序列化的JSON密钥命名为对象的公共属性getter名称是否可能或合法?像这样的东西?

> "{"x": "34", "y": "28"}"

谢谢!

1 个答案:

答案 0 :(得分:4)

ES2015没有改变。您仍然只需定义自定义toJSON方法:

toJSON() {
  return {x: this.x, y: this.y};
}