【发布时间】:2015-11-26 17:23:27
【问题描述】:
我使用的是 ES6,我使用 Babel 转译成普通的 JavaScript。
我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。
对于Maps 和Sets,ES7 中提出了toJSON()-function
【问题讨论】:
标签: javascript ecmascript-6 babeljs
我使用的是 ES6,我使用 Babel 转译成普通的 JavaScript。
我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。
对于Maps 和Sets,ES7 中提出了toJSON()-function
【问题讨论】:
标签: javascript ecmascript-6 babeljs
您可以使用 JSON.stringify 并将任何类型的变量传递给它(假设它可以用 JSON 表示)。
它适用于所有当前的浏览器;如果您需要一个真正旧浏览器的后备,您可以使用Crockford's 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);
});
如果您的someLargeObject 包含具有toJSON 方法的子对象,则此代码将使用该对象的实现,否则使用JSON.stringify。
【讨论】: