当使用JSON.stringify(或类似的东西)对对象进行字符串化时,有一种方法可以限制字符串化深度,即只有n级深入到对象树中并忽略之后的所有内容(或者更好:将占位符放在那里,表示留下了一些东西出来)?
我知道这JSON.stringify需要一个表单的替换函数,function (key, value)但我没有找到一种方法来获取当前键值对的原始对象的深度,交给更换器函数.
有没有办法使用默认的JSON.stringify实现?或者我已经达到了我应该自己实现字符串化的程度?或者是否有另一个可以推荐的具有此选项的字符串化库?
出于某种原因,我似乎无法在DOMWindow对象上使用JSON.stringify.例如:
console.log(window.self); // Outputs a hierarchical DOMWindow object
console.log(JSON.stringify(window.self)); // Outputs nothing - not even an error
alert(window.self); // Alerts "[object DOMWindow]"
alert(JSON.stringify(window.self)); // Again nothing - not even an error
在Safari和Chrome上测试过.有没有人有任何想法我怎么能做到这一点?
编辑:
将编辑移至新问题,因为它并不特定于此.
如上所述,这种情况发生在Safari中,而在Chrome和Firefox中它运行良好.
我认为这是因为变成json的对象有两个包含moment对象的属性.我将它们更改为日期对象并stringify传递了函数.
奇怪的是,如果我尝试这样做JSON.stringify(moment())是有效的,所以我不知道如何调试它并找到问题所在.
以下是Safari中错误的屏幕截图:

编辑:
经过一些调试后,我发现dhtmlxwindow onclose事件发生后会发生此错误.我在一个dhtmlx窗口中加载一个局部视图,在那里我创建了这个对象,在关闭窗口之前,该对象被推入一个初始化为父视图的列表中.
在我关闭窗口之前我做了,JSON.stringify(parent.addedContracts)并且在onclose事件发生后它工作正常(我没有覆盖代码)列表具有相同的对象(我检查了所有属性)但是stringify同一列表失败.
编辑:
创建添加到列表中的对象如下:
var contractStartDate = moment(contractStartDateCalendar.getDate(true), "L");
var contractEndDate = moment(contractEndDateCalendar.getDate(true), "L");
var newContract = {
    Id                  : uniqueId,
    FunctionDesc        : $("#contractFunction").val(),
    ContractHours       : $("#contractHours").val(),
    AdditionalCostFactor: $("#contractAdditionalCostFactor").val().replace(',', '.'),
    VacationFormula     : contractHolidayCostFactor,
    StartDate           : contractStartDate,
    EndDate             : contractEndDate,
    Notes               : Encoder.htmlEncode(tinyMCE.get('contractNotes').getContent()),
    DaysOfWeek          : workingDaysString,
    PlusMinus           : $("#contractTypeDropdown option:selected").data("plusminus"),
    SalaryCalculation   : $("#contractTypeDropdown option:selected").data("salarycalculation"),
    ContractTypeId      : $("#contractTypeDropdown").val(),
    ContractTypeName    : $("#contractTypeDropdown option:selected").text(), …var ones = [1];
ones[1] = ones;
ones;
// => [1, [1, [1, [1, [1, ...]]]]]
var ones_ = [1];
ones_[1] = ones_;
ones_;
// => [1, [1, [1, [1, [1, ...]]]]]
如何确定ones和ones_等于?是否有处理上述圆形结构的算法?
是否有可以对复杂JSON对象进行字符串化的内置方法?
每次我使用JSON.stringfy我都会收到此错误:将循环结构转换为JSON,我还需要它的解析器
这是我的对象的图像 http://imgur.com/s3HbdtQ