Цикл по запросу JSON - PullRequest
       3

Цикл по запросу JSON

0 голосов
/ 08 июня 2010

All

У меня есть следующий запрос JSON, который приходит через вызов функции в PHP. Как видно, каждый URL может принадлежать одной или нескольким категориям.

Как я могу выполнить цикл в JSON-запросе и создать ассоциативный массив, который указывает, в каком катиде содержится сколько 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 Ответ

1 голос
/ 08 июня 2010

Это должно сделать это:

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, вы получите полностью испорченные результаты из свойства .length элемента «Array», поэтому в этом случае объект больше подходит. Если вам нужно перебрать catids сейчас, просто используйте синтаксис for (var key в catCounts).

РЕДАКТИРОВАТЬ: Это должен быть код JavaScript, теперь я понимаю, что, возможно, вы хотели PHP-код. Из того, что я помню о PHP, это все равно должно работать, но если нет, то должно быть близко.

...