2017-01-20 1 views
0

JSON에서 날짜로 데이터를 구문 분석하고 문제가 있습니다.JSON의 날짜 범위 사이에 모든 이벤트를 추출하십시오.

본질적으로 두 번의 날짜/시간 사이에 발생하는 이벤트를 가져오고 싶지만 실제로는 행운이 없습니다. 내가 사용할 수있는 JSON 파서가 있다는 것을 알고 있지만, 발견 한 대부분은 필드를 추출합니다.

필드를 추출하고 싶지 않습니다. 특정 날짜 이후의 모든 이벤트에 대해 원시 JSON을 원합니다.

아래의 데이터에서 2017-01-14 2:00 이후의 모든 이벤트 (각 JSON 항목의 4 행 모두)를 가져와야합니다. 이것을 어떻게 할 수 있습니까?

{ 
    "_id": "58816d03e4b00654468d2781", 
    "datetime": "2017-01-03T05:23:02Z", 
    "msg": "foo1" 
    "msg2": "foo2" 
}, 
{ 
    "_id": "58816d03e4b00654468d2963", 
    "datetime": "2017-01-14T01:50:52Z", 
    "msg": "foo1" 
    "msg2": "foo2" 
}, 
{ 
    "_id": "58816d03e4b00654468d3068", 
    "datetime": "2017-01-16T13:41:46Z", 
    "msg": "foo1" 
    "msg2": "foo2" 
}, 
{ 
    "_id": "58816d03e4b00654468d3068", 
    "datetime": "2017-01-20T21:16:40Z", 
    "msg": "foo1" 
    "msg2": "foo2" 
}, 

답변

0

당신의 '이벤트'객체가 배열에있는 경우에는 날짜 소품이 특정 후 있다면 그것이 될 것입니다 귀하의 경우 (테스트를 통과하는 모든 개체를 반환하는 array.filter() 메소드를 사용할 수 있습니다 시간) 예를 들어 http로

var data, 
    filteredData, 
    testDate = new Date("2017-01-14T02:00:00Z"); 

data = [ 
    { 
     "_id": "58816d03e4b00654468d2781", 
     "datetime": "2017-01-03T05:23:02Z", 
     "msg": "foo1", 
     "msg2": "foo2" 
    }, 
    { 
     "_id": "58816d03e4b00654468d2963", 
     "datetime": "2017-01-14T01:50:52Z", 
     "msg": "foo1", 
     "msg2": "foo2" 
    }, 
    { 
     "_id": "58816d03e4b00654468d3068", 
     "datetime": "2017-01-16T13:41:46Z", 
     "msg": "foo1", 
     "msg2": "foo2" 
    }, 
    { 
     "_id": "58816d03e4b00654468d3068", 
     "datetime": "2017-01-20T21:16:40Z", 
     "msg": "foo1", 
     "msg2": "foo2" 
    } 
] 

filteredData = data.filter(function(d){ 
    return new Date(d.datetime) > testDate; 
}); 

제대로 작동 않는 데이터

var filteredData, 
    testDate = new Date("2017-01-14T02:00:00Z"); 

function httpGetAsync(theUrl, callback){ 
    var xmlHttp = new XMLHttpRequest(); 
    xmlHttp.onreadystatechange = function() { 
     if (xmlHttp.readyState == 4 && xmlHttp.status == 200) 
      callback(xmlHttp.responseText); 
    } 
    xmlHttp.open("GET", theUrl, true); // true for asynchronous 
    xmlHttp.send(null); 
} 

function filterResponseByDate(data){ 
    filteredData = data.filter(function(d){ 
     return new Date(d.datetime) > testDate; 
    }); 
} 

httpGetAsync(yourDataURL,filterResponseByDate); 
+0

감사에 대한 요청을 얻을. 내 데이터가 플랫 파일과 같이 다른 곳에 있다면 어떻게해야합니까? 이 코드 내에 어떻게 데이터를 삽입 할 수 있습니까? 또한 예를 들어 하루 전 같은 상대 필드로 변경하려면 어떻게해야합니까? – bdf0506

+0

데이터가 다른 곳에 있다면 서버에 요청해야합니다. 이렇게했다면이 코드와 함께 http 요청을 받게되고 http 요청의 응답이 사용자의 데이터가되고 일단 수신하면 데이터를 필터링합니다. 일반적으로 자바 스크립트에서 날짜 개체와 시간은 매우 까다 롭습니다.하지만 새 날짜 개체에서 하루를 아주 쉽게 뺄 수 있어야합니다. 이것을 확인하십시오 : http://stackoverflow.com/questions/1296358/subtract-days-from-a-date-in-javascript – haydenwagner

+0

어쩌면 나는 이것을 오해하고 있습니다. 데이터가 "http : // foo/bar/data"페이지에 있다고 가정합니다. 간단한 wget으로 그 페이지를 잡으면 그 페이지는 내가 필요로하는 모든 것의 JSON을 얻을 것이다. 당신은 그것을 어떻게 통합합니까? 지금 상대 날짜 인 1 시간 후에 발생한 모든 사건을 간단히 추출 할 수 있습니까? – bdf0506

관련 문제