JSON DECODE с использованием PHP

Я делаю некоторые декодеры 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.' '; } ?> 

Он работает правильно … Но, к моему беспокойству, мне нужны только детали фамилии и возраста Томаса. Мне нужно обработать это, чтобы извлечь только определенные функции, а не все объекты.

Related of "JSON DECODE с использованием PHP"

Учитывая этот 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")