Я делаю некоторые декодеры JSON – я внимательно изучил этот учебник – Как разобрать JSON с 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.' '; } ?>
Он работает правильно … Но, к моему беспокойству, мне нужны только детали фамилии и возраста Томаса. Мне нужно обработать это, чтобы извлечь только определенные функции, а не все объекты.
Учитывая этот 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";
Дайте данные 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()
функции strtolower()
.
РЕДАКТИРОВАТЬ:
EDIT 2:
array()
если страна не найдена. get_currency()
, теперь проверяется на common
имя и official
имя. Передача либо вернет значение. Фактически Томас – это первое имя, а не фамилия, попробуйте этот код.
print "names:", ",". join (x ["last"] для x в obj, если x ["first"] == "Thomas")