为什么JSON.stringfy($('#calendar').fullcalendar('cl

Why JSON.stringify($('#calendar').fullcalendar('clientEvents')) fails?

本文关键字:fullcalendar cl #calendar JSON 为什么 stringfy      更新时间:2023-11-29

作为标题,当我尝试这样做时:

myString = JSON.stringify($('#calendar').fullcalendar('clientEvents'));

它失败了。我试图提醒myString,但我看到了一系列的[Object object], ... .。例如,如果我尝试提醒myArray[0].title,它会正确返回。

我哪里做错了?

附言:目标是通过AJAX获得一个字符串保存在文件中。

您的结果告诉您,fullCalendar clientEvents方法提供的数组中的对象无法直接转换为JSON。我在http://fullcalendar.io页面(我在尝试转换圆形结构时出错);我认为这是由于您使用的FullCalendar版本与他们使用的版本的差异,或者您的浏览器和我的浏览器处理循环结构的方式的差异。不管怎样,这些物体显然不能按原样使用。

目标是通过AJAX获得一个字符串保存在文件中。

您可以通过在数组上使用map来获得可以成功转换为JSON的对象,将您想要的属性白名单(或将不想要的属性黑名单)。

下面是一个白名单列出startendtitle属性的示例:

var json = JSON.stringify($("#calendar").fullCalendar("clientEvents").map(function(e) {
    return {
        start: e.start,
        end: e.end,
        title: e.title
    };
}));

这里有一个黑名单source和任何以_开头的属性:

var json = JSON.stringify($("#calendar").fullCalendar("clientEvents").map(function(e) {
    var rv = {};
    Object.keys(e)
        .filter(function(k) {
            return k != "source" && !k.startsWith("_");
         })
        .forEach(function(k) {
            rv[k] = e[k];
        });
    return rv;
}));

在他们的网站上为我工作。

以下是两者的ES2015版本:

白名单:

let json = JSON.stringify($("#calendar").fullCalendar("clientEvents").map(e => ({
    start: e.start,
    end: e.end,
    title: e.title
})));

黑名单:

let json = JSON.stringify($("#calendar").fullCalendar("clientEvents").map(e => {
    let rv = {};
    Object.keys(e)
        .filter(k => k != "source" && !k.startsWith("_"))
        .forEach(k => {
            rv[k] = e[k];
        });
    return rv;
}));