PHP - JSON数据解析

Jak*_*ake -1 php json

所有,

我有以下JSON数据.我需要帮助在PHP中编写一个函数,它接受一个categoryid并返回一个数组中属于它的所有URL.

像这样的东西::

<?php
function returnCategoryURLs(catId)
{
    //Parse the JSON data here..
    return URLArray;
}
?>


{
    "jsondata": [
        {
            "categoryid": [
                20 
            ],
            "url": "www.google.com" 
        },
        {
            "categoryid": [
                20 
            ],
            "url": "www.yahoo.com" 
        },
        {
            "categoryid": [
                30 
            ],
            "url": "www.cnn.com" 
        },
        {
            "categoryid": [
                30 
            ],
            "url": "www.time.com" 
        },
        {
            "categoryid": [
                5,
                6,
                30 
            ],
            "url": "www.microsoft.com" 
        },
        {
            "categoryid": [
                30 
            ],
            "url": "www.freshmeat.com" 
        } 
    ]
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Mat*_*chu 6

尝试内置的json_decode函数.


Pas*_*TIN 6

这样的事情怎么样:


你首先使用json_decode,这是php的内置函数来解码JSON数据:

$json = '{
    ...
}';
$data = json_decode($json);
Run Code Online (Sandbox Code Playgroud)

在这里,你可以看到什么数据的PHP样(即对象,数组,...)的JSON字符串解码送给你,使用,例如:

var_dump($data);
Run Code Online (Sandbox Code Playgroud)


而且,然后,你遍历所有的数据项,搜索中的每个元素的categoryid,如果$catId您正在寻找在列表中- in_array帮助这样做:

$catId = 30;
$urls = array();
foreach ($data->jsondata as $d) {
    if (in_array($catId, $d->categoryid)) {
        $urls[] = $d->url;
    }
}
Run Code Online (Sandbox Code Playgroud)

而且,每次找到匹配项时,url都要添加到数组中......


这意味着,在循环结束时,您拥有URL列表:

var_dump($urls);
Run Code Online (Sandbox Code Playgroud)

在这个例子中给你:

array
  0 => string 'www.cnn.com' (length=11)
  1 => string 'www.time.com' (length=12)
  2 => string 'www.microsoft.com' (length=17)
  3 => string 'www.freshmeat.com' (length=17)
Run Code Online (Sandbox Code Playgroud)


由你来构建 - 不应该有很多事要做;-)