2012-03-13 2 views
0

저는 사용자가 서로에게 메시지를 보낼 수있는 소셜 네트워킹 사이트에서 작업하고 있습니다. 나는이 같은 JSON 형식의 사용자가 수신 된 메시지를 가져 오기 위해 PHP 파일에 아약스 요청을 보내고 : 위의 시나리오에서 json 배열의 요소를 필터링하는 방법은 무엇입니까?

{"messages":[ 
{"mid":"1","name":"Sam","msg":"Hi Anna"}, 
{"mid":"4","name":"Kelly","msg":"Hi Anna"}, 
{"mid":"5","name":"Sam","msg":"Hi Anna"}, 
{"mid":"7","name":"Sam","msg":"Hello Anna"}, 
{"mid":"8","name":"Kelly","msg":"Anna"} ]} 

이 사용자 "안나가"사용자의 메시지를 수신 "샘"과 "켈리". 이제이 json 구조를 구문 분석하여 각 사용자의 응답을 분리하고 Anna에게 보여야합니다.

어떻게 json 배열을 2 개의 자바 스크립트 배열로 파싱 할 수 있습니까? 그래서 루프를 만들어 응답을 표시 할 수 있습니까?

+1

A) 무엇을 시도 했습니까? B) 내 생각에 JSON에 결함이있다. 이 소셜 네트워크에 여러 명의 Sams가 있다면 어떻게 될까요? 메일은 별도의 메일이 아닌 발신자의 사용자 ID로 그룹화되어야합니다. – Crashspeeder

+0

는 다음 코드를 사용하도록했지만, 그것은 적절한 결과를 제공되지 않는다 : jQuery.each (응답 함수 (I, 발) { \t \t \t \t \t 경보 (발) \t \t \t \t \t을}); –

+0

@Crashspeeder : 적절한 json 데이터로 질문을 업데이트했습니다 ... 메시지 ID로 메시지를 그룹화합니다. –

답변

3

이미 JSON 디코딩 및 자바 스크립트 변수로 한 가정

var dataByUser = { 
    "Sam" : ["Hi Anna", "Hi Anna", "Hello Anna"], 
    "Kelly": ["Hi Anna", "Anna"] 
}; 

할 수 있습니다 다음 루프 것을 생각 할 때마다 당신을 다음을 필요로 함 :

for (var userName in dataByUser) { 
    // dataByUser[userName] is the array of messages from userName 
} 

또는 관심있는 userName을 알고있는 경우 당신이 바로 그것으로 인덱스를 할 수있는,에 :

dataByUser["Sam"]  // contains array of messages from Sam 

편집 : 분명히, 당신은 당신의 질문을 편집하고 나는이 대답을 쓸 때 데이터에 없었던 메시지 ID (mid)를 추가했다. 그 메시지 ID로 무엇을하고 싶은지 불분명합니다. 필요한 경우 각 사용자의 데이터는 각 객체가 메시지 ID와 메시지를 모두 포함하는 문자열 배열 대신 객체 배열 일 수 있습니다.

+0

메시지 ID는 사용자가 각 메시지를 구별하는 데 사용됩니다. Crashspeeder가 지적한 것처럼 동일한 이름을 가진 몇몇 사용자가있을 수 있습니다. –

1

는이 작품을 것이다,

var messages = jQuery.parseJSON('StringSourceOfYourJsonEncoded'); 
    jQuery(messages).each(function(index,value) { 
      // GET THE OBJECT DATA FROM HERE. 
      alert(messages.msg); 
    }); 

희망처럼 변수로 다가오는 인코딩 된 JSON을 가져 가라. 이것은 다음과 같습니다 데이터 구조를 초래

var response = { 
    "messages":[ 
    {"name":"Sam","msg":"Hi Anna"}, 
    {"name":"Kelly","msg":"Hi Anna"}, 
    {"name":"Sam","msg":"Hi Anna"}, 
    {"name":"Sam","msg":"Hello Anna"}, 
    {"name":"Kelly","msg":"Anna"} 
    ] 
}; 

var dataByUser = {}, userName; 
var msgs = response.messages; 

for (var i = 0; i < msgs.length; i++) { 
    userName = msgs[i].name; 
    // if we don't have any msgs for this user, then initialize their data structure 
    if (!dataByUser[userName]) { 
     dataByUser[userName] = []; 
    } 
    dataByUser[userName].push(msgs[i].msg); 
} 

:

+1

그는 PHP 솔루션이 아닌 JS 솔루션을 찾고 있습니다. – ThiefMaster

관련 문제