JSON 使用 PHP 解码
JSON DECODE using PHP
我正在做一些 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.'
';
}
?>
它工作正常...但我担心我只需要 Thomas 的姓氏和年龄的详细信息。我需要处理这个以仅提取某些特征,而不是所有对象。
实际上 Thomas 是名字而不是姓氏
试试这个代码..
print "names:", ",".join(x["last"] for x in obj if x["first"] == "Thomas")
给定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";
将您提供 link 的 JSON 数据提供给,这应该 return 给定国家/地区的货币价值:
$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:
- Returns 如果找到国家名称,则为货币数组;如果找不到国家名称,则为空数组
array()
。
- 传入
get_currency()
的名称现在根据 common
名称和 official
名称进行检查。传递任何一个都将 return 一个值。
我正在做一些 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.'
';
}
?>
它工作正常...但我担心我只需要 Thomas 的姓氏和年龄的详细信息。我需要处理这个以仅提取某些特征,而不是所有对象。
实际上 Thomas 是名字而不是姓氏 试试这个代码..
print "names:", ",".join(x["last"] for x in obj if x["first"] == "Thomas")
给定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";
将您提供 link 的 JSON 数据提供给,这应该 return 给定国家/地区的货币价值:
$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:
- Returns 如果找到国家名称,则为货币数组;如果找不到国家名称,则为空数组
array()
。 - 传入
get_currency()
的名称现在根据common
名称和official
名称进行检查。传递任何一个都将 return 一个值。