我正在处理报表页,它必须处理一个大的JSON对象。这个JSON对象可能至少包含500到600个内部JSON对象。我必须迭代它们,并在我的报告页中显示它们。
在JSON迭代期间,我将进入浏览器:
RangeError:超过最大调用堆栈大小
您知道如何在客户端处理这个大JSON对象吗?有没有为我做的和不做的?
目前,我正在将我的大JSON对象拆分成更小的JSON对象,不确定这种方法是否会产生所需的结果
更新:
在下面的递归nested
方法中,我得到了错误。在发送任何值之前,我已经缩小了JSON的大小。value1
是我减少的JSON对象(它至少有100个JSON对象)。
function nested(value1) {
var final1 = {};
var Keys1 = Object.keys(value1);
if (angular.equals(Keys1, $scope.Headers)) {
return final1;
} else {
angular.forEach(value1, function(value, key) {
final1[key] = {}; // Getting the error in this line
final1[key] = nested(value);
});
}
return final1;
}
编辑:我已经获取了JSON对象的骨架。在下面的JSON对象中,每个级别可以有50个JSON对象,级别可以扩展到10个。
"First": {
"second-1": {
"level3": {
"data1": {
"Key1": "val1",
},
"data2": {
"Key2": "",
},
"dat3": {
"Key3": "",
}
},
"second-2": {
"Level3": {
"Level4": {
"data1": {
"Key1": ""
},
"data2": {
"Key1": ""
}
},
}
}
}
}
发布于 2016-02-01 15:49:41
我猜这个问题与JSON的大小或复杂性无关,这个问题是由于结构糟糕的递归函数造成的。
首先,这里真的需要递归吗?JSON嵌套的深度有多深?如果只有几个层次深,我建议使用简单的条件逻辑来提取您的值,如果其子值存在而不是递归。
第二,如果坚持递归,我不建议在函数中使用$scope变量。我会将其重构为一个方法参数,以便您在执行每个函数时确切地知道它是什么。
第三(可能是无限循环的原因),递归函数没有明确的终止状态。您的函数一直在挖掘对象递归的键,直到这个条件变为真为止。
angular.equals(Keys1, $scope.Headers)
Object.keys()返回一个字符串数组,因此$scope.Headers必须与此数组完全匹配,才能使该语句返回true。这意味着$scope.Headers必须是一个数组,具有完全相同的字符串数和相同的顺序。似乎不太可能所有子节点都具有适当终止的这一特性。
如果您想发布一个json示例,您想要解析它,以及您希望如何访问它的数据,那么我们可能可以帮助您制定一个更好的解析解决方案。
https://stackoverflow.com/questions/35132033
复制相似问题