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

Hed*_*dge 2 javascript ecmascript-6 babeljs

我正在使用ES6,我使用Babel转换成普通的JavaScript.

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

对于MapsSets有一个toJSON()在ES7建议-功能

lxg*_*lxg 6

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

它适用于所有当前浏览器; 如果你需要一个真正旧浏览器的后备,你可以使用Crockford的JSON-js.

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

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

例如,以下应该可以工作(没有测试,只是从我的头脑中):

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

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