ES6 中有类似 object.toJSON 的东西吗?
Is there something like object.toJSON in ES6?
我正在使用 ES6 我使用 Babel 转译成普通的 JavaScript。
我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。
对于Maps
和Sets
,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
.
我正在使用 ES6 我使用 Babel 转译成普通的 JavaScript。
我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。
对于Maps
和Sets
,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
.