过滤json以匹配计划

时间:2013-05-25 16:44:13

标签: javascript json

鉴于以下json,如何过滤它以提取并返回该对象的会话与“现在”当前时间匹配的相关对象到接下来的3小时? (意思是,如果我的当前时间是23 May 2013 9 am,将返回对象1,2,3,4和6。)

使用像JSONPath - http://goessner.net/articles/JsonPath/这样的库会更有效地工作吗?

    var schedule_list = [
        {
            id: 1,
            name: 'John',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1000",
                    end: "11000"
                },
                {
                    id: 2,
                    date: "23-May-2013",
                    start: "1300",
                    end: "1500"
                }
            ]
        },
        {
            id: 2,
            name: 'Mary',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1000",
                    end: "11000"
                },
                {
                    id: 2,
                    date: "23-May-2013",
                    start: "1300",
                    end: "1500"
                }
            ]
        },
        {
            id: 3,
            name: 'Peter',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1000",
                    end: "11000"
                },
                {
                    id: 2,
                    date: "23-May-2013",
                    start: "1300",
                    end: "1500"
                }
            ]
        },
        {
            id: 4,
            name: 'Joe',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1000",
                    end: "11000"
                },
                {
                    id: 2,
                    date: "23-May-2013",
                    start: "1300",
                    end: "1500"
                }
            ]
        },
        {
            id: 5,
            name: 'Max',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1600",
                    end: "1700"
                }
            ]
        },
        {
            id: 6,
            name: 'Tom',
            sessions: [
                {
                    id: 1,
                    date: "23-May-2013",
                    start: "1200",
                    end:  "1300"
                }
            ]
        }
    ];

我正在寻找日期时间对象比较的通用解决方案。不仅仅是基于字符串的比较。基本上,我的“当前时间”可以由用户更改,服务器返回的日期,开始,结束日期和时间(以我的JSON格式)都可以变化。

2 个答案:

答案 0 :(得分:0)

看看这个:

http://jsfiddle.net/xCsK3/2/

基本上,这段代码的工作是什么:

//get the current time and replace whitespaces with '-'
var currentTime = "23-May-2013-9-am";
for(var x = 0; x <schedule_list.length; x++){
    for(var y = 0; y < schedule_list[x].sessions.length; y++){
        //check if current sessions obj time, is substring of current time
        if(currentTime.indexOf(schedule_list[x].sessions[y].date) > -1)
           console.log("x = "+x+", y = "+y+", date = "+schedule_list[x].sessions[y].date);
    }
}

希望有所帮助

答案 1 :(得分:0)

您可以使用DefiantJS(http://defiantjs.com),它使用搜索方法扩展全局对象JSON。使用此方法,您可以使用XPath表达式查询JSON结构(XPath是标准化查询语言,而JSONPath不是)。

搜索方法返回数组中的匹配项(如果未找到匹配项,则返回空数组)。 这是下面代码的jsfiddle;
http://jsfiddle.net/hbi99/6KLMv/

var data = [ ... ],
    res = JSON.search( data, //sessions[date="23-May-2013" and start>="0900" and start<="1200"]/.. );

for (var i=0; i<res.length; i++) {
    console.log( res[i].id );
}
// 1
// 2
// 3
// 4
// 6

它具有通用性:)