检查是否在解码的JSON字符串中设置了项目

时间:2010-11-05 13:32:27

标签: php json twitter

我正在研究一个从Twitter的user_timeline REST API加载数据的模块。一旦我解密了JSON,我在PHP中执行foreach语句来获取每个返回的推文。我目前在检查JSON字符串的retweeted_status部分下的项目时遇到问题。我正在调用的JSON是:

"http://api.twitter.com/1/statuses/user_timeline.json?count=".$count."&include_rts=1&screen_name=".$uname.""
只有当推文是转推时才会返回

转推._status。因此,例如,如果推文是转发,我想返回原始推文的文本,而不是转发。我试过这段代码:

if(isset($t->retweeted_status->text)) {
    $tweet = $t->retweeted_status->text;
} else {
    $tweet = $t->text;
}

使用上面的代码,当没有返回retweeted_status时,在第一次返回isset之后,所有对象的isset仍然为真。

我需要的是我的foreach中的条件,它将正确检查retweeted_status下的项目(因为转发的数据点被禁用并且已经存在一段时间)并且如果retweeted_status不存在则将检查重置为false。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

PHP内置了出色的JSON支持,因此无需手动浏览JSON字符串以查明它所代表的对象是否具有给定属性。只是做

$twitterObj = json_decode( $responseTextFromTwitterAPI [, true ] );

如果JSON字符串表示关联数组,则使用第二个参数= true,如果它是“普通”(整数索引),则为false。 (你需要查看Twitter的文档才能找到答案。)那么你的检查应该是(我不熟悉Twitter的API规范......):

foreach ( $twitterObj as $tweet ) {
    if ( isset( $tweet['retweeted_status'] ) ) {
        // Retweet
    } else {
        // Original
    }
    // Do stuff...
}

编辑:

这对我有用:

$obj = json_decode( $jsonFromTwitter, true );
foreach ( $obj as $o ) {
if ( isset($o['retweeted_status']) ) {
   echo $o['retweeted_status']['text'];
} else {
    echo $o['text];
}

你应该能够从那里得到你想要的地方,对吗?