Проверка наличия элемента в json
используя следующий канал:
http://api.twitter.com/1/statuses/user_timeline.json?screen_name=microsoft&include_rts=1&count=10
я успешно могу пройти через это, чтобы получить детали, которые я хочу отобразить на моей html-странице.
однако, мне нужно проверить, если и я не уверен, как это сделать?
В настоящее время я перебираю данные, где data
возвращается jquery-ajax:
data[i].retweeted_status.user.profile_image_url
если data[i].retweeted_status.user.profile_image_url
не существует, он не возвращает null или undefined, я просто получаю следующую ошибку:
cannot read property 'user' of undefined
6 ответов
это сообщение об ошибке предполагает, что ваши данные[i] или ваш retweeted_status не определены, что означает, что ваш вызов для получения json, скорее всего, не удастся. Когда данные возвращаются из Twitter, у них всегда есть url-адрес изображения профиля, потому что они показывают яйцевидное изображение для тех, кто не загружен. Вы должны поставить это перед своим циклом for:
if (typeof(retweeted_status) != "undefined")
{
//code for what to do with json here
}
if (something !== undefined) {
...
}
... или еще лучше:
if (typeof something != "undefined") {
...
}
если вы цикл и доступ к вложенности объектов:
if(!data)
return;
while(data.length)
{
var tweet_data = data.shift();
/* do some work */
if(!tweet_data|| !tweet_data.retweeted_status)
continue;
var retweeted_status = tweet_data.retweeted_status;
/* do your other work */
}
этому циклу больше не нужно использовать индексы массива, что не является наиболее эффективным, если вам специально не нужен индекс для чего-то. Вместо этого он выводит первый элемент из массива и использует этот объект напрямую. Затем внутренние элементы цикла могут проверить наличие свойства на tweet_data
.
Я стараюсь избегать использования более 1 уровня разыменования по 2 причинам (например,objA.child.property
):
1) Вы можете увидеть существование объекта с самого начала, и если он не существует, выпрыгнуть или присвоить значения по умолчанию.
2) каждый раз, когда JavaScript должен получить доступ к методу property
, он сначала должен найти child
withing objA
, а затем property
. Может быть медленным в больших петлях.
посмотри $.grep (). Это поможет вам пройти через объекты JSON. Я использовал его по ссылке, которую вы предоставили. Я использовал его для просмотра твитов и поиска ретвитов изображений пользователей. Вы можете посмотреть мой код здесь: http://jsfiddle.net/q5sqU/7/
еще одна вещь, которую вы можете сделать, которая сработала для меня:
if(retweeted_status) {
// your code
}