Извлечение значений из вложенных JSON-данных в PHP
Объекты и массивы JSON
также могут быть вложенными. Объект JSON
может произвольно содержать другие объекты JSON
, массивы, вложенные массивы, массивы объектов JSON
и т. д. В следующем примере показано, как декодировать вложенный объект JSON
и распечатать все его значения в PHP
:
<?
// определяем рекурсивную функцию для извлечения вложенных значений
function printValues($arr) {
global $count;
global $values;
// проверяем, что это массив
if(!is_array($arr)){
die("ERROR: Input is not an array");
}
// запускаем основной цикл, если значение само по себе является массивом, рекурсивно вызываем эту же функцию добавляем все найденные значения в массив элементов вывода и увеличиваем счетчик на 1 для каждого найденного значения
foreach($arr as $key=>$value){
if(is_array($value)){
printValues($value);
} else{
$values[] = $value;
$count++;
}
}
// возвращаем общее количество и значения, найденные в массиве
return array('total' => $count, 'values' => $values);
}
// назначаем закодированную JSON-строку переменной PHP
$json = '{
"book": {
"name": "Harry Potter and the Goblet of Fire",
"author": "J. K. Rowling",
"year": 2000,
"characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"],
"genre": "Fantasy Fiction",
"price": {
"paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11"
}
}
}';
// декодируем JSON-данные в формат ассоциативного массива PHP
$arr = json_decode($json, true);
// вызываем функцию и печатаем все значения
$result = printValues($arr);
echo "" . $result["total"] . " value(s) found:
";
echo implode("
", $result["values"]);
echo "
";
// выводим одно значение
echo $arr["book"]["author"] . "
"; // выводит: J. K. Rowling
echo $arr["book"]["characters"][0] . "
"; // выводит: Harry Potter
echo $arr["book"]["price"]["hardcover"]; // выводит: $20.32