ES6 中有类似 object.toJSON 的东西吗?

Is there something like object.toJSON in ES6?

我正在使用 ES6 我使用 Babel 转译成普通的 JavaScript。

我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。

对于MapsSets,ES7

中提出了一个toJSON()函数

您可以使用 JSON.stringify 并将任何类型的变量传递给它(假设它可以在 JSON 中表示)。

它适用于所有当前的浏览器;如果您需要 really 旧浏览器的回退,您可以使用 Crockford's JSON-js.

但是,请记住,对于对象,只有 public 属性被序列化。没有通用的方法来动态序列化函数变量等。

这就是为什么一些特殊的对象类型提供 toJSON 或类似方法的原因。为了将这样的函数用于任意对象,您必须将函数作为第二个参数传递给 JSON.stringify,它检查是否存在 toJSON 函数。

例如,以下应该有效(未经测试,只是我的想法):

var jsonString = JSON.stringify(someLargeObject, function(key, value){
    return (value && typeof value.toJSON === 'function') 
        ? value.toJSON()
        : JSON.stringify(value);
});

如果您的 someLargeObject 包含一个带有 toJSON 方法的子对象,此代码将使用该对象的实现,否则使用 JSON.stringify.