我使用ES6我使用Babel将其转换为普通的JavaScript。
我想将对象序列化为JSON格式,我想知道ES5,ES6是否提供了方便的功能。
对于Maps
和Sets
,ES7中提出了toJSON()
- 函数
答案 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
。