1

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

使用像http://goessner.net/articles/JsonPath/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 中)都可以是可变的。

4

2 回答 2

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

希望能帮助到你

于 2013-05-25T16:57:28.523 回答
0

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

search 方法返回数组中的匹配项(如果未找到匹配项,则为空数组)。这是下面代码的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

它是通用的:)

于 2014-01-14T19:02:44.390 回答