JSON.stringify()-对象的自定义序列化程序

时间:2018-10-19 15:23:12

标签: javascript json typescript

假设我有一个对象:

const a = {
  foo: 123,
  bar: 'example'
}

该对象是许多其他对象的一部分,即

const b = {
  a: a,
  anotherField: "example"
}

实际上,我使用的是TypeScript,所有这些对象都属于同一类,我认为这并不重要。

b对象序列化为JSON之后,我需要获取此字符串(即,我只是从foo获得a字段):

{ a: 123, anotherField: "example" }

告诉JSON.stringify()如何将a对象转换为字符串的最简单,最优雅的方法是什么?

可能类似于Python所允许的内容。

2 个答案:

答案 0 :(得分:3)

您可以在字符串化时使用替换器:

 const result = JSON.stringify(b, (k, v) => v && v.stringify() || v);

这样,您可以轻松地向a添加自定义字符串:

 const a = {
   foo: 123,
   bar: 'example',
   stringify() { return this.foo; }
 }

答案 1 :(得分:1)

您可以在toJSON中定义a

  

如果要被字符串化的对象具有名为toJSON的属性,其值是一个函数,那么toJSON()方法将自定义JSON字符串化行为:代替被序列化的对象,由toJSON()方法返回的值将被调用,而不是被序列化的对象。序列化。

(来源:MDN

例如:

class A {
  constructor(foo, bar) {
    this.foo = foo;
    this.bar = bar;
  }

  toJSON() {
    return this.foo;
  }
}

const a = new A(123, "some name");
const b = {
  a: a,
  anotherField: "example"
};

console.log(JSON.stringify(b)); // "{"a":123,"anotherField":"example"}"

相关问题