javascript ES6 中有类似 object.toJSON 的东西吗?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32332196/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Is there something like object.toJSON in ES6?
提问by Hedge
I'm using ES6 I transpile using Babel into ordinary JavaScript.
我使用的是 ES6,我使用 Babel 将其转换为普通的 JavaScript。
I want to serialise objects into JSON format and am wondering if ES5,ES6 offers a convenient function to do so.
我想将对象序列化为 JSON 格式,并且想知道 ES5、ES6 是否提供了一个方便的函数来这样做。
For Maps
and Sets
there is a toJSON()
-function proposed in ES7
对于Maps
并Sets
有一个toJSON()
在ES7建议-功能
回答by lxg
You can use JSON.stringify
and pass any kind of variable to it (given that it can be represented in JSON).
您可以使用JSON.stringify
任何类型的变量并将其传递给它(假设它可以用 JSON 表示)。
It works in all current browsers; in case you need a fallback for a reallyold browser, you can use Crockford's JSON-js.
它适用于所有当前浏览器;如果你需要一个非常旧的浏览器的后备,你可以使用Crockford 的 JSON-js。
However, keep in mind that, regarding objects, only public properties are serialized. There's no a generic way to serialize function variables etc. on the fly.
但是,请记住,对于对象,只有公共属性会被序列化。没有一种通用的方法来即时序列化函数变量等。
This is why some special object types provide a toJSON
or similar method. In order to use such a function for arbitrary objects, you must pass a function as second parameter to JSON.stringify
which checks for the existence of a toJSON
function.
这就是为什么一些特殊的对象类型提供了一个toJSON
或类似的方法。为了对任意对象使用这样的函数,您必须将函数作为第二个参数传递给JSON.stringify
它来检查toJSON
函数是否存在。
For example, the following should work (not tested, just from the top of my mind):
例如,以下应该有效(未经测试,只是我的想法):
var jsonString = JSON.stringify(someLargeObject, function(key, value){
return (value && typeof value.toJSON === 'function')
? value.toJSON()
: JSON.stringify(value);
});
If your someLargeObject
contains a sub-object with a toJSON
method, this code would use the object's implementation, otherwise use JSON.stringify
.
如果您someLargeObject
包含一个带有toJSON
方法的子对象,则此代码将使用该对象的实现,否则使用JSON.stringify
.