我需要一个函数从任何参数构建一个JSON有效字符串,但是:
通常它应该能够以截断它们为代价来处理大对象.
作为参考,此代码失败:
var json = JSON.stringify(window);
Run Code Online (Sandbox Code Playgroud)
避免递归问题很简单:
var seen = [];
return JSON.stringify(o, function(_, value) {
if (typeof value === 'object' && value !== null) {
if (seen.indexOf(value) !== -1) return;
else seen.push(value);
}
return value;
});
Run Code Online (Sandbox Code Playgroud)
但现在,除了复制并更改道格拉斯Crockford的代码追踪深度的,我没有发现任何方式,以避免像很深刻的对象堆栈溢出window或任何event.有简单的解决方案吗?
我只想要一个对象的第一个深度级别(我不想要任何孩子).我愿意使用任何可用的库.大多数库只会在达到递归深度时抛出异常,而不是仅仅忽略.如果这不可能,有没有办法忽略给定某种数据类型的某些成员的序列化?
编辑:假设我有一个像这样的对象:
class MyObject
{
String name = "Dan";
int age = 88;
List<Children> myChildren = ...(lots of children with lots of grandchildren);
}
Run Code Online (Sandbox Code Playgroud)
我想删除所有子(甚至复杂类型)以返回这样的对象:
class MyObject
{
String name = "Dan";
int age = 88;
List<Children> myChildren = null;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法让下面的浅拷贝只得到一层深?我有一种使用完全不同的设计来解决这个问题的方法,但我想知道是否有其他人遇到过我之前尝试转换为字符串的问题。
var SomeObjClass = function() {
var self = this;
this.group = {
members: [self]
};
};
var p = new SomeObjClass();
var str = JSON.stringify(p);
Run Code Online (Sandbox Code Playgroud)