使用PHP的JSON DECODE

时间:2016-08-11 20:37:18

标签: php json decode

我正在做一些JSON解码 - 我按照本教程进行了很好的解释 - How To Parse JSON With PHP

和PHP代码,我用

 <?php
 $string='{"person":[
            {
                "name":{"first":"John","last":"Adams"},
                "age":"40"
            },
            {
                "name":{"first":"Thomas","last":"Jefferson"},
                "age":"35"
            }
         ]}';

$json_a=json_decode($string,true);

$json_o=json_decode($string);


// array method
foreach($json_a[person] as $p)
{
echo '

Name: '.$p[name][first].' '.$p[name][last].'

Age: '.$p[age].'

';

}




// object method
foreach($json_o->person as $p)
{
echo '

<br/> Name: '.$p->name->first.' '.$p->name->last.'

Age: '.$p->age.'

';
}


 ?>

它工作正常......但是我担心我只需要托马斯的详细信息。姓氏和年龄。我需要处理这个只提取某些功能,而不是所有对象。

3 个答案:

答案 0 :(得分:1)

提供您提供链接的JSON数据,这应该返回给定国家/地区的货币值:

$country_data = json_decode(file_get_contents("https://raw.githubusercontent.com/mledoze/countries/master/countries.json"), TRUE);

function get_currency($name) {
    global $country_data;

    $name = strtolower($name);
    $output = reset(array_filter($country_data, function ($value, $key) use($name) {
        if(strtolower($value['name']['common']) === $name || strtolower($value['name']['official']) === $name) {
            return true;
        }
    }, ARRAY_FILTER_USE_BOTH))['currency'];
    return ($output) ? $output : array();
}

/* Return same results */

echo "<pre>";
print_r(get_currency("Islamic Republic of Afghanistan"));
echo "</pre>";

echo "<pre>";
print_r(get_currency("Afghanistan"));
echo "</pre>";

注意:以上功能不区分大小写。如果您需要支持区分大小写,请删除strtolower()函数引用。

修改

  • 更正了代码段中的错误。

编辑2:

  • 如果找到国家/地区名称,则返回一组货币;如果找不到该国家/地区,则返回一个空数组array()
  • 现在,根据get_currency()名称和common名称检查传入official的名称。传递任何一个都会返回一个值。

答案 1 :(得分:0)

实际上托马斯是第一个不是姓氏的名字 试试这段代码..

print“names:”,“,”。join(x [“last”] for x in obj if x [“first”] ==“Thomas”)

答案 2 :(得分:0)

鉴于this JSON,您可以按如下方式获取国家/地区的货币:

function getCurrencyFor($arr, $findCountry) {
    foreach($arr as $country) {
        if ($country->name->common == $findCountry) {
            $currency = $country->currency[0];
            break;
        }
    }
    return $currency;
}

$json = file_get_contents("https://raw.githubusercontent.com/mledoze/countries/master/countries.json");
$arr = json_decode($json);
// Call our function to extract the currency for Angola:
$currency = getCurrencyFor($arr, "Angola");

echo "Angola has $currency as currency";