当使用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
Run Code Online (Sandbox Code Playgroud)
在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(), …
Run Code Online (Sandbox Code Playgroud) var ones = [1];
ones[1] = ones;
ones;
// => [1, [1, [1, [1, [1, ...]]]]]
var ones_ = [1];
ones_[1] = ones_;
ones_;
// => [1, [1, [1, [1, [1, ...]]]]]
Run Code Online (Sandbox Code Playgroud)
如何确定ones
和ones_
等于?是否有处理上述圆形结构的算法?
是否有可以对复杂JSON对象进行字符串化的内置方法?
每次我使用JSON.stringfy我都会收到此错误:将循环结构转换为JSON,我还需要它的解析器
这是我的对象的图像 http://imgur.com/s3HbdtQ