2016-02-27 2 views
-1

Я вытаскиваю json с внешнего сайта. Я хватаю строку с этим кодом из их JSON, как я анализирую его:JSON не работает и продолжает код

breweryName = data.data[i].breweries[0].name; 

Проблема заключается в том, что одна из записей в формате JSON я получаю не имеет значения для пивоваренных заводов [0] .name.

Как я могу продолжать выполнять код? Несмотря на один плохой вход? Я попытался это:

if(data.data[i].breweries[0].name === "undefined"){ 
    breweryName = "N/A" 
} 
else{ 
    breweryName = data.data[i].breweries[0].name; 

} 

что до сих пор не удается

+0

Не знаю, почему меня проголосовали как обычно. – Mike

ответ

-1

В JavaScript, используйте функцию TYPEOF

if (typeof data.data[i].breweries === "undefined" || 
    typeof data.data[i].breweries[0] === "undefined" || 
    typeof data.data[i].breweries[0].name === "undefined") 

Вы также можете включить

if (data.data[i].breweries[0].name.trim() === "") 

для проверки имен, присутствуют, но пусты.

Ярлык подход может работать хорошо ...

breweryName = data.data[i].breweries[0].name || "N/A" 
+0

Ошибка является результатом доступа к имени свойства undefined, что является [0] равно. Ни один из этих подходов не показал этого вопроса и не ссылался на его присутствие. –

+0

@TravisJ OP Asks «Проблема в том, что одна из записей в JSON, которую я получаю, не имеет значения для пивоваренных заводов [0] .name." почему вы решили, что доступное свойство 'name' undefined ??? –

+0

** typeof ** позволяет проверить наличие переменной или свойства. Если typeof возвращает undefined, вы знаете, что переменная не определена и может избежать доступа к ней, что приведет к ошибке. Этот подход является распространенным способом решения проблемы. – user2182349

0

это сначала проверяет, есть ли breweries по данному индексу i, а также если имеются вложенные элементы, путем проверки свойства размера; во внутреннем цикле, она проверяет name недвижимости с typeof():

if(
    typeof(data.data[i].breweries) !== 'undefined' && 
    data.data[i].breweries.size > 0 
){ 
     /* traverse the individual entries */ 
     data.data[i].breweries.forEach(function(v, i){ 
     if(typeof(v.name) !== 'undefined'){ 
      /* the element has a name property */ 
     } else { 
      /* name property is absent */ 
     } 
     }); 
} 

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

потому что это может быть массив или объект ... который требует различной обработки.

Смежные вопросы