2010-06-07 3 views
0

Tous,En boucle via la demande JSON

J'ai la requête JSON suivante qui provient d'un appel de fonction en PHP. Comme il est évident, chaque URL peut appartenir à un ou plusieurs catids.

Comment puis-je faire une boucle sur la requête JSON et créer un tableau associatif qui indique quel est le nombre d'URL de catid.

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

JSON Demande:

{ 
    "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 
      ] 
     } 
    ] 
} 

Merci

Répondre

1

Cela devrait le faire:

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

Notez que j'ai utilisé un objet() au lieu d'un tableau() pour stocker les comptes. Vous voulez une recherche associative par catid, vous ne stockez pas réellement une quantité finie d'éléments par index. Si vous avez utilisé Array à la place, vous obtiendrez des résultats totalement brisés de la propriété .length du "Array", donc Object est plus approprié dans ce cas. Si vous avez besoin d'itérer les catids maintenant, utilisez la syntaxe for (var key in catCounts).

EDIT: Ceci est destiné à être du code javascript, je me rends compte maintenant que vous vouliez peut-être du code PHP. De ce que je me souviens de PHP, cela devrait fonctionner, mais sinon, il devrait être proche.

+0

Cela fonctionne très bien .. Merci! – Jake