簡體   English   中英

檢查是否在解碼的JSON字符串中設置了項目

[英]Check if an item isset in a decoded JSON string

我正在研究一個模塊,該模塊從Twitter的user_timeline REST API加載數據。 解碼完JSON之后,我就在PHP中執行了一條foreach語句來獲取每個返回的tweet。 我目前在檢查JSON字符串的retweeted_status部分下的項目時遇到問題。 我正在調用的JSON是:

"http://api.twitter.com/1/statuses/user_timeline.json?count=".$count."&include_rts=1&screen_name=".$uname.""

僅當推文為轉發時,才返回retweeted_status。 因此,例如,如果該推文是轉發,我想返回原始推文的文本,而不是該推文。 我已經試過這段代碼:

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

使用上面的代碼,當未返回retweeted_status時,在第一次將isset返回true之后,isset對於所有對象仍然為true。

我需要的是在我的foreach中有條件的條件,可以有條件地檢查retweeted_status下的項目(因為轉推的數據點已禁用並且已經存在了一段時間),如果不存在retweeted_status,則將檢查重置為false。

有什么建議么?

PHP具有內置的出色的JSON支持,因此無需手動遍歷JSON字符串來查找它所表示的對象是否具有給定的屬性。 做就是了

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

與第二PARAM = true ,如果JSON字符串代表一個關聯數組,假如果它是一個“普通”(整數索引)之一。 (您將需要檢查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];
}

您應該能夠從那里到達想要的地方,對嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM