如何使用jquery扫描JSON以确定某个字符串的实例数?

时间:2010-08-02 20:43:21

标签: javascript jquery json

我有一些看起来像这样的JSON ......

{"appJSON": [
{
"title":"Application Title",
"category":"Business", 
"industry":"Retail", 
"language":"English", 
"tags":[
        {"tags":"Sales"},{"tags":"Reporting"},{"tags":"Transportation"},{"tags":"Hospitality"}
       ], 
},
{
"title":"Airline Quality Assurance",
...
...
...]}

我正在循环使用JSON来获取数据中所有唯一标记的数组。

我的问题是,现在我在JSON中有一系列不同的唯一标签,如何最好地确定每个标签出现的次数?

所以基本上我正在寻找生成JSON中已找到的所有标签的列表(我已经拥有),每个标签出现的次数(我还没有)。

提前多多感谢!

2 个答案:

答案 0 :(得分:2)

我假设当你找到一个新标签时,你会检查你是否已经在那里找到了那个标签。如果不这样做,则将其添加到列表中。为什么不检查做什么。

var nextTag=//get the next tag in the JSON list
var newTag=true;
for(var i=0;i<tags.length;i++){
  if(nextTag === tags[i]){
    tagCount[i]++;
    newTag=false;
    break;
  }
}
if(newTag){
  tags[tags.length]=nextTag;
  tagCount[tagCount.length]=1;
}

这使用两个数组,其中tagCount[i]tags[i]中标记出现的次数。您可以使用一个对象来执行此操作,或者您可以使用。

答案 1 :(得分:1)

作为替代方案,这里有一个填充关联数组的函数;键将是标记,值将是该标记的出现次数。

var tagCounts = []; // Global variable here, but could be an object property or any array you like really

function countTags(tags, tagCounts)
{
    $.each(tags, function(i, item) {

        var tag = item.tags; // This would change depending on the format of your JSON

        if(tagCounts[tag] == undefined) // If there's not an index for this tag
            tagCounts[tag] = 0;

        tagCounts[tag]++;

    });
}

所以你可以在任意数量的标签数组上调用这个函数,传入你的tagCounts(totals)数组,它会聚合总数。

var tags1 = [{"tags":"Sales"},{"tags":"Reporting"},{"tags":"Transportation"},{"tags":"Hospitality"}];
var tags2 = [{"tags":"Reporting"},{"tags":"Transportation"}];
var tags3 = [{"tags":"Reporting"},{"tags":"Hospitality"}];

countTags(tags1, tagCounts);
countTags(tags2, tagCounts);
countTags(tags3, tagCounts);

然后你可以这样读出来:

for(var t in tagCounts)
    // t will be the tag, tagCounts[t] will be the number of occurrences

这里的工作示例:http://jsfiddle.net/UVUrJ/1/

qw3n的回答实际上是一种更有效的处理方式,因为你只需要遍历所有标记一次 - 但除非你有一个非常庞大的JSON源,否则差别不会很明显。