鉴于以下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格式)都可以变化。
答案 0 :(得分:0)
看看这个:
基本上,这段代码的工作是什么://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
它具有通用性:)