2010-06-07 159 views
0

全部,通过JSON请求循环

我有以下通过PHP中的函数调用发出的JSON请求。很明显,每个URL都可以属于一个或多个cati。

如何循环浏览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; 
     } 
    } 
} 

请注意,我用了一个对象(),而不是一个Array()来存储计数。你想通过catid进行关联查找,你实际上并不是通过索引存储有限数量的项目。如果你使用了Array而不是Array,那么你会从“Array”的.length属性中得到完全破坏的结果,因此在这种情况下Object更合适。如果您现在需要迭代cati,只需使用for(var key in catCounts)语法即可。

编辑:这是为了javascript代码,我现在意识到,也许你想要的PHP代码。从我记得的PHP,这应该仍然有效,但如果没有,它应该是接近。

+0

This works great ..谢谢! – Jake 2010-06-07 21:29:04