我目前有一个大的JSON文件:hastebin
但是只想要帖子的标题。 我已经尝试过了...
$json = $page;
$o = json_decode($json, true);
echo($json);
$titles = $o["*"]["*"]["*"]["*"]["title"];
var_dump($titles);
但是它不起作用-它返回NULL!有时它什么都不返回。
如果有人想知道,是的,来自Reddit。
答案 0 :(得分:0)
PHP不能在数组键中使用*
之类的通配符。无论您使用什么字符串来引用密钥,它都会尝试查找具有该确切字符串的密钥。因此,您尝试的操作无法进行,因为没有任何*
键。
您可以通过迭代所有级别或迭代外部级别并引用适当的嵌套键来获取它。但是,如果您只是在寻找“ title”的所有实例,则递归方法可能是获取它们的更简单方法。
array_walk_recursive($o, function($value, $key) use (&$titles) {
if ($key == 'title') $result[] = $value;
});
var_dump($titles);
这将获得'title'的任何值,而不管其在数组中的深度如何,因此,如果这不是您想要的值,则需要对其进行迭代并专门引用正确的值。
答案 1 :(得分:0)
这应该做到:
$titles = array_map(function($post) {
return $post['data']['title'];
}, $o['data']['children']);
我不确定您使用"x"
索引的期望是什么,但是您应该阅读有关arrays的信息。
答案 2 :(得分:0)
直接处理这么长的JSON文档非常困难。该页面返回的结果不是有效的JSON。它包含一些HTML标记,但是如果您将posts数据插入到文件中,则可以根据JSON的结构执行以下操作(您可以在外部链接here中找到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使用此方法,但要确保它会返回没有html的有效JSON