6

我有 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);
}

我使用这里提到的审查器:Chrome sendrequest error: TypeError: Converting circular structure to JSON n

但是我在浏览器上得到以下异常:

未捕获的 TypeError:将循环结构转换为 JSON

这是 Java Script 对象: 在此处输入图像描述

我在 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);
    }

3-当我在删除单个对象后尝试对该数组进行字符串化时,我得到了提到的异常。所以.. anu 想为什么它第一次通过而第二次失败!

4

2 回答 2

8

您不能对日期对象进行 JSON 编码。

来自json.org:“值可以是双引号中的字符串、数字、true 或 false 或 null,或者对象或数组。这些结构可以嵌套。”

于 2012-05-08T19:22:53.250 回答
8

问题是源对象是循环引用

您应该创建一个没有源对象的对象副本。

这就是我在 FullCalendar 中解决问题的方法。

于 2013-02-23T11:02:41.717 回答