所有
我在PHP中通过函数调用获得了以下JSON请求。很明显,每个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
]
}
]
}
由于
答案 0 :(得分: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;
}
}
}
请注意,我使用Object()而不是Array()来存储计数。你想要catid的关联查找,你实际上并没有按索引存储有限数量的项目。如果你使用了Array,那么你将从“Array”的.length属性中获得完全破坏的结果,因此在这种情况下Object更合适。如果您现在需要迭代catids,只需使用for(catCounts中的var键)语法。
编辑:这是javascript代码,我现在意识到也许你想要PHP代码。从我记得的PHP,它应该仍然有效,但如果没有,它应该是接近的。