Проверьте, установлен ли элемент в декодированной строке JSON - PullRequest
0 голосов
/ 05 ноября 2010

Я работаю над модулем, который загружает данные из REST API Twitter_timeline пользователя. После того, как я расшифровал JSON, я делаю оператор foreach в своем PHP, чтобы получить каждый из возвращенных твитов. В настоящее время у меня проблема с проверкой элементов в части retweeted_status строки JSON. 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 (поскольку ретвитированный объект данных отключен и некоторое время не использовался) и сбрасывает проверку на false, если retweeted_status отсутствует.

Есть предложения?

1 Ответ

1 голос
/ 05 ноября 2010

PHP имеет превосходную встроенную поддержку JSON, поэтому нет необходимости вручную выполнять поиск по строке JSON, чтобы выяснить, имеет ли объект, который он представляет, заданное свойство. Просто сделай

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

со вторым параметром = true, если строка JSON представляет ассоциативный массив, и false, если это «простой» (целочисленный) индекс. (Вы захотите проверить документы Twitter, чтобы выяснить это.) Тогда ваши проверки должны составить что-то вроде (я не знаком со спецификацией API Twitter ...):

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

EDIT:

Это работает для меня:

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

Вы должны быть в состоянии добраться туда, куда хотите, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...