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

Php 检查项目是否设置在解码的JSON字符串中,php,json,twitter,Php,Json,Twitter,我正在开发一个模块,该模块从Twitter的user_timeline REST API加载数据。一旦我解码了JSON,我就在PHP中执行一个foreach语句来获取每个返回的tweet。我目前在检查JSON字符串的retweetd_status部分下的项目时遇到问题。我调用的JSON是: "http://api.twitter.com/1/statuses/user_timeline.json?count=".$count."&include_rts=1&screen_name

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

"http://api.twitter.com/1/statuses/user_timeline.json?count=".$count."&include_rts=1&screen_name=".$uname.""
仅当tweet是转发时,才会返回retweetd_状态。例如,如果tweet是retweet,我想返回原始tweet的文本,而不是retweet。我尝试过以下代码:

if(isset($t->retweeted_status->text)) {
    $tweet = $t->retweeted_status->text;
} else {
    $tweet = $t->text;
}
使用上述代码,当retweetd_status未返回时,在第一次将isset返回true之后,所有对象的isset仍然为true

我需要的是我的foreach中的一个条件,它将正确检查处于retweeted_状态的项目(因为retweeted datapoint已被禁用并且已经存在一段时间),如果retweeted_状态不存在,则将检查重置为false


有什么建议吗?

PHP内置了出色的JSON支持,因此无需手动搜索JSON字符串来确定它所表示的对象是否具有给定的属性。照办

$twitterObj = json_decode( $responseTextFromTwitterAPI [, true ] );
如果JSON字符串表示关联数组,则使用第二个参数=
true
,如果是“普通”(整数索引)数组,则为false。(您需要查看Twitter的文档以了解情况。)然后您的检查应该是(我不熟悉Twitter的API规范…):

编辑:

这对我很有用:

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

你应该可以从那里得到你想要的,对吗?

我在我的json_解码中添加了真参数,当我对isset($t->retweeted_status)进行var_转储时,我仍然会收到应该为false的真参数。当我以isset($t['retweeted_status'])的形式进行检查时,我收到“无法使用stdClass类型的对象作为数组”PHP错误。“此时,第四个对象是retweet.Hmm…”。。。对于编辑中的代码,如果我只从助手中提取JSON RetreVal并运行它,它就会工作。因此,我的代码中有一些东西将JSON从数组更改为对象。助手位于。关于什么可以转换它有什么建议吗?我不太明白你想做什么,但我认为你应该在foreach循环之前放置一个数组或boolian,并使用它来保存状态,但如果你更清楚地说明你在尝试什么,我可以在我的模块中提供更多帮助,我试图从JSON字符串的retweetd_status部分提取信息,如果它存在,如果不存在,则从JSON字符串的不同部分返回信息。
$obj = json_decode( $jsonFromTwitter, true );
foreach ( $obj as $o ) {
if ( isset($o['retweeted_status']) ) {
   echo $o['retweeted_status']['text'];
} else {
    echo $o['text];
}