Поиск названий в формате JSON

В настоящее время у меня есть этот большой файл JSON: hastebin

Но просто хочу названия постов.
Я попробовал это …

$json = $page;
$o = json_decode($json, true);

echo($json);

$titles = $o["*"]["*"]["*"]["*"]["title"];
var_dump($titles);

Но это не работает — это возвращает NULL! Иногда это просто ничего не возвращает.

Если кому-то интересно, да, это от Reddit.

-1

Решение

Это должно сделать это:

$titles = array_map(function($post) {
return $post['data']['title'];
}, $o['data']['children']);

Я не уверен, что вы ожидали, используя "x" индексы, но вы, вероятно, должны прочитать о массивы.

0

Другие решения

PHP не может использовать подстановочные знаки, такие как * в массиве ключей. Какую бы строку вы ни использовали для ссылки на ключ, она попытается найти ключ с этой точной строкой. То, что вы пытались, не может работать, потому что нет * ключи.

Вы можете получить его путем итерации всех уровней или внешнего уровня и обращения к соответствующему вложенному ключу. Но если вы просто ищете все экземпляры ‘title’, рекурсивный метод может быть более простым способом получить их.

array_walk_recursive($o, function($value, $key) use (&$titles) {
if ($key == 'title') $result[] = $value;
});
var_dump($titles);

Это получит любое значение ‘title’ независимо от его глубины в массиве, поэтому, если это не то, что вам нужно, вам нужно будет выполнить его итерацию и конкретно указать правильные значения.

0

Очень трудно иметь дело непосредственно с таким длинным документом JSON. Возвращенный результат со страницы не является допустимым JSON. Он содержит некоторые теги HTML, но если вы берете данные постов и вставляете их в файл, вы можете сделать следующее в соответствии со структурой вашего JSON (Вы можете найти свой JSON во внешней ссылке Вот):

<?php
header("Content-Type:application/json");


$posts=file_get_contents('json.php');

//decode your JSON STRING
$posts=json_decode($posts,true);

//create a title variable to store your titles
$titles=array();
foreach($posts['data']['children'] as $child)
{
array_push($titles,$child['data']['title']);
}
echo json_encode($titles);

?>

Вы даже можете использовать этот подход, используя URL-адрес, но убедитесь, что он вернет действительный JSON без HTML

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector