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

时间:2015-09-01 12:53:45

标签: javascript ecmascript-6 babeljs

我使用ES6我使用Babel将其转换为普通的JavaScript。

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

对于MapsSets,ES7中提出了toJSON() - 函数

1 个答案:

答案 0 :(得分:6)

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

适用于所有当前浏览器;如果您需要使用真正旧浏览器的后备广告,可以使用Crockford's JSON-js

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

这就是为什么某些特殊对象类型提供public async Task MainFunctionAsync() { await DoSomethingAsync(); await DoSomethingMoreAsync(); } public Task DoSomethingAsync() { // Do meaningful async stuff } public Task DoSomethingMoreAsync() { // Do more meaningful async stuff } 或类似方法的原因。为了对任意对象使用这样的函数,必须将函数作为第二个参数传递给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