JavaScript异常:未捕获类型错误:将循环结构转换为JSON
我有一个JSON对象:JavaScript异常:未捕获类型错误:将循环结构转换为JSON,javascript,json,Javascript,Json,我有一个JSON对象: [#1={id:"2012-05-04", title:"Scheduled", start:(new Date(1336096800000)), source:{events:[#1#], className:[]}, _id:"2012-05-04", _start:(new Date(1336089600000)), end:null, _end:null, allDay:true, className:[]}] 我试图将其严格化: var test = JSON
[#1={id:"2012-05-04", title:"Scheduled", start:(new Date(1336096800000)), source:{events:[#1#], className:[]}, _id:"2012-05-04", _start:(new Date(1336089600000)), end:null, _end:null, allDay:true, className:[]}]
我试图将其严格化:
var test = JSON.stringify(resourceVacation, censor(resourceVacation));
function censor(censor) {
return (function() {
var i = 0;
return function(key, value) {
if (i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value)
return '[Circular]';
++i; // so we know we aren't using the original object anymore
return value;
}
})(censor);
}
我使用这里提到的审查员:n
但是,我在浏览器上遇到以下异常:
未捕获类型错误:将循环结构转换为JSON
以下是Java脚本对象:
我在Mozilla浏览器中使用toSource()获得了上一个JSON对象。
知道怎么修吗
========================================更新========================
实际上,我需要从一开始就与您分享scnerio:
1-最初:我有一个表单,最后我构建了java脚本对象,它是:
#1=[{id:"2012-05-03", title:"Scheduled", start:(new Date(1336010400000)), source:{events:#1#, className:[]}, _id:"2012-05-03", _start:(new Date(1336003200000)), end:null, _end:null, allDay:true, className:[]}]
此对象通常被字符串化。。。请注意,这对于稍后将触发异常的服务器来说是典型的
2-然后,我使用以下命令从此数组中删除对象:
function deleteVacation(day) {
for (var index = 0; index < resourceVacation.length; index++) {
if (resourceVacation[index].id == day)
resourceVacation.splice(index,1);
}
功能删除假期(天){
对于(var索引=0;索引
3-当我在删除单个对象后尝试字符串化该数组时,我得到了提到的异常。
所以..anu知道为什么它第一次通过而第二次失败了!!你不能用JSON编码日期对象
From:“值可以是双引号中的字符串、数字、true或false或null、对象或数组。这些结构可以嵌套。”问题在于源- 您应该创建不带源对象的对象副本
这就是我在FullCalendar中解决问题的方法。验证您的JSON。它似乎无效:实际上我已经拥有的是object数组,我使用obj.toSource()获取该JSON。我已经更新了我的帖子。如果您有任何问题,请反馈给我。没有“JSON对象”这类东西.JSON是字符串的格式。您拥有的只是一个“对象”,直到它被序列化为有效的JSON。这是一个有价值的信息。Thx cHao。你知道我该如何解决这个问题吗?我不明白你的意思,你能详细说明一下吗!@Echo:这很简单。JSON中的值在它们可以是什么类型上有限制。答案是日期不是这些类型之一。如果你想要一个日期,一个简单的方法解决这个问题的方法是将日期转换为字符串或数字。根据您的需要,一个或另一个可能更好。实际上,我认为这可能只是问题的一部分。错误(以及您链接到的其他答案)表示您正在尝试对具有循环引用的对象进行编码。我将尝试删除
开始
和\u开始
值,如果这无法解决问题,请删除数组或对象属性。如果解决了问题,请检查以确保您删除的数组或对象中没有引用更高的值嗯,我不太确定。不过命名函数delete
有点可怕。如果你使用的是Chrome,我会尝试“暂停未捕获异常”功能(在js调试工具中单击停止符号/暂停图标,直到它变成紫色)。当抛出错误时,它应该会中断,让您有机会查看程序的当前状态。坦率地说,这是我刚刚知道的一个新功能。谢谢与我共享。关于异常之前我的程序的状态,正如我所提到的。让我抓狂的是,我可以将对象添加到此数组中,并且它会正常字符串化。当我从数组中删除一个对象时,问题就出现了。如果你有任何想法,请告诉我。有人可以解释如何实现这一点吗?