为什么JSON返回显示开放的大括号而不是数据?

时间:2015-11-22 22:04:27

标签: php json

所以我从twitter返回数据,由于某种原因我无法返回计数数据,当我回显它时它返回的是开放的大括号..这就是我试图回应它的方式。

"statuses": [],
"search_metadata": {
    "completed_in": 0.008,
    "max_id": 668543797022826500,
    "max_id_str": "668543797022826503",
    "query": "URL",
    "refresh_url": "URL",
    "count": 15,
    "since_id": 0,
    "since_id_str": "0"
}

这就是下面代码返回的内容..我要做的就是回显count数据,但它没有...所有它打印而不是15是{{1} }

{

有人可以向我解释为什么不打印吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

$ajsn = json_decode($counter, true);
echo $ajsn['search_metadata']['count'];

答案 1 :(得分:0)

运行此命令时:

$counter    = $connection->get("https://api.twitter.com/1.1/search/tweets.json?q=".$this->url );
$ajsn       = json_encode($counter);

echo $ajsn['search_metadata']['count'];

您说“ {”。

应该得到一个字符,因为json_encode返回的是字符串,而不是数组。并且将关键字索引到字符串中应该会给您带来错误,或者至少是警告。如果不是,则可能返回字符串的等价整数,即零。因此,您将获得JSON编码的第零个(第一个)字符。

这是一个“ {”实际上是个好消息。这意味着json_encode确实返回了一些内容:大括号是JSON对象的开头。

您应该做的是验证 {$ counter}是什么。是物体吗?数组?然后,您可以适当地回显它。例如$counter->search_metadata->count

否则,由于$ajsn是有效的字符串,因此一个快速而肮脏的丑陋解决方法是再次将其转换为数组

$counter    = $connection->get("https://api.twitter.com/1.1/search/tweets.json?q=".$this->url );
$ajsn       = json_encode($counter);    // Convert whatever to string
$ajsn       = json_decode($ajsn, true); // Convert ajsn to associative array

echo $ajsn['search_metadata']['count'];

此外,激活所有错误和警告输出。您应该已经得到了一些东西来告诉您您所处的位置,但您一无所获-这会使调试变得不必要地复杂。使用error_reporting和相应的php.ini设置激活屏幕显示或至少记录文件。