- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
因此,JSON.stringify 提供了一种很好的方式来转换 JS 对象,例如:
var baz = {"foo":1, "bar":someFunction};
转换成 JSON 字符串,例如:
{"foo":1}
它使用一个可选的第二个参数来控制哪些字段应该被序列化:
JSON.stringify(baz, ["foo"]);
这很好,但有一个问题。假设您的“baz”实际上是另一个对象的属性,并且您想序列化另一个对象:
someObject.baz = {"foo":1, "bar":someFunction};
JSON.stringify(someObject, ["baz"]);
好吧,通常你只需在 baz 上定义一个 toJSON 方法,例如:
someObject.baz = {"foo":1, "bar":someFunction};
someObject.baz.toJSON = function() { /* logic to "toJSON" baz*/ }
JSON.stringify(someObject, ["baz"]);
现在,正如我之前提到的,我们已经有了“toJSON” baz 的完美逻辑:
someObject.baz.toJSON = function() {
return JSON.stringify(baz, ["foo"]);
}
但是如果你尝试把它放到你的 toJSON 中,你会得到一个递归错误,因为 stringify 将触发 toJSON,这将触发 stringify,这将... :-(
您可以通过 hack 解决此问题:
someObject.baz.toJSON = function() {
var oldToJON = this.toJSON;
this.toJSON = null;
var ret = JSON.stringify(baz, ["foo"]);
this.toJSON = oldToJON;
return ret;
}
但是……这似乎是错误的。所以,我的问题是:有什么方法可以利用 JSON.stringify inside 对象的 toJSON 方法的漂亮内置序列化功能(而不必在 stringify 期间隐藏 toJSON 方法本身操作)?
最佳答案
A toJSON method does not serialize: it returns the value represented by the name/value pair that should be serialized, or undefined if nothing should be serialized.
所以你只需要返回你想要序列化的值。在您的情况下, baz.toJSON
应该简单地返回您想要序列化的 baz
对象部分:
someObject.baz.toJSON = function() {
return { foo: this.foo };
};
关于javascript - 如何在自定义 toJSON 方法中使用 JSON.stringify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289282/
我是一名优秀的程序员,十分优秀!