2010-06-07 9 views
0

모두루프를 통한 JSON 요청

다음 JSON 요청은 PHP의 함수 호출을 통해 제공됩니다. 분명히 알 수 있듯이 각 URL은 하나 이상의 catids에 속할 수 있습니다.

어떻게 JSON 요청을 반복하고 어떤 catid에 URL이 있는지 나타내는 결합 배열을 만들 수 있습니다.

Ex: $arr = array("140"=>3, "141"=>4, "144"=>3) 

JSON 요청 :

{ 
    "header": { 
     "action": "loadurls" 
    }, 
    "data": [ 
     { 
      "url": "godaddy.com", 
      "catids": [ 
       141 
      ] 
     }, 
     { 
      "url": "cnn.com", 
      "catids": [ 
       140 
      ] 
     }, 
     { 
      "url": "zdnet.com", 
      "catids": [ 
       140 
      ] 
     }, 
     { 
      "url": "yahoo.com", 
      "catids": [ 
       140,141,144 
      ] 
     }, 
     { 
      "url": "google.com", 
      "catids": [ 
       141,144 
      ] 
     }, 
     { 
      "url": "rediff.com", 
      "catids": [ 
       141 
      ] 
     }, 
     { 
      "url": "apple.com", 
      "catids": [ 
       144 
      ] 
     } 
    ] 
} 

덕분에

답변

1

이 그것을 수행해야합니다 나는 개체 (사용

var fooJson = {...jsonsnipped...}; 
var catCounts = new Object(); 
for(var i=0; i<fooJson.data.length; i++) 
{ 
    var dataItem = fooJson.data[i]; 
    for(var j=0; j<dataItem.catids; j++) 
    { 
     var cat = dataItem.catids[j]; 
     if (catCounts[cat] >= 0) 
     { 
      catCounts[cat] = catCounts[cat] + 1; 
     } 
     else 
     { 
      catCounts[cat] = 1; 
     } 
    } 
} 

주) 대신 배열의() 저장하기 카운트. catid에 의한 연관 검색을 원한다면 실제로 인덱스로 한정된 양의 항목을 저장하는 것이 아닙니다. Array를 대신 사용하면 "Array"의 .length 속성에서 완전히 깨진 결과가 나옵니다. 따라서이 경우 Object가 더 적절합니다. catids를 반복해야하는 경우 for (catCounts의 var 키) 구문을 사용하면됩니다.

편집 : 이것은 자바 스크립트 코드를위한 것이며, 아마 당신이 PHP 코드를 원한다는 것을 알았습니다. 내가 PHP에서 기억하는 것으로부터 이것은 여전히 ​​작동해야하지만, 그렇지 않으면 닫아야한다.

+0

위대한 작품입니다 .. 감사합니다! – Jake