проверьте, существует ли вложенный массив в JSON - PullRequest
0 голосов
/ 02 мая 2011

Вот пример json:

    {
   "kind": "shopping#product",
   "id": "tag:google.com,2010:shopping/products/6582229/17914968800165668776",
   "selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/6582229/gid/17914968800165668776?alt\u003djson",
   "product": {
    "googleId": "17914968800165668776",
    "author": {
     "name": "Red Tag Market",
     "accountId": "6582229"
    },
    "creationTime": "2010-11-30T10:00:00.000Z",
    "modificationTime": "2011-05-01T09:20:00.000Z",
    "country": "US",
    "language": "en",
    "title": "The Fantastic Mr. Fox - BLU-RAY/DVD",
    "description": "Wit.",
    "link": "ht361",
    "condition": "new",
    "gtin": "00024543657552",
    "inventories": [
     {
      "channel": "online",
      "price": 22.51,
      "currency": "USD"
     }
    ],
    "images": [
     {
      "link": "http://208.131.143.232/i/6/3/0/7/6/1/8.jpg",
      "thumbnails": [
       {
        "width": 60,
        "height": 60,
        "link": "hBEevU46OsArJElwIeErF_3E7Zzu12M2eLSvQBdYiMLaRWrI60aF8lHxRqOz-wkx2YJUIVdCrzrEQDWxgcc"
       }
      ]
     }
    ]
   }
  },
  {
   "kind": "shopping#product",
   "id": "tag:google.com,2010:shopping/products/6296724/17894083551590155418",
   "selfLink": "https://www.googleapis.com/shopping/search/v1/public/products/6296724/gid/17894083551590155418?alt\u003djson",
   "product": {
    "googleId": "17894083551590155418",
    "author": {
     "name": "eBay",
     "accountId": "6296724"
    },
    "creationTime": "2011-04-04T00:43:02.000Z",
    "modificationTime": "2011-04-04T00:43:02.000Z",
    "country": "US",
    "language": "en",
    "title": "Fy.",
    "link": "htt530831212&itemid\u003d140530831212&icep_meta_categ_id\u003d11232",
    "condition": "used",
    "gtin": "00024543657552",
    "inventories": [
     {
      "channel": "online",
      "price": 14.99,
      "currency": "USD"
     }
    ],
    "images": [
     {
      "link": "http://i.ebayimg.com/00/%24%28KGrHqYOKkQE1r4Vh1gFBNl4n0t17g%7E%7E_1.JPG?set_id\u003d8800005007",
      "thumbnails": [
       {
        "width": 60,
        "height": 60,
        "link": "http://lh
       }
      ]
     }
    ]
   }
  }

Что я хочу сделать, это посмотреть, существует data.items[i].product.images[] или нет.Как вы можете видеть, массив Images не присутствует во втором ответе, что убивает мой javascript в том месте, где я пытаюсь использовать data.items[i].product.images[] для любых целей.Я искал и до сих пор не нашел решения.

Редактировать: Я только что попробовал это и все еще без игры в кости:

if(data.items[i].product.images !== undefined){
    var image = 'images/inverticon.png';
}else{
    var image = data.items[i].product.images[0].thumbnails[0].link;
}

Я не получаю никаких ошибок, скрипт просто перестает работать,Если я опускаю код изображения, все работает нормально, и если в возвращенном JSON есть изображение [], оно работает нормально.

Редактировать: вот решение:

if(data.items[i].product.images !== undefined){
    var image = data.items[i].product.images[0].thumbnails[0].link;
}else{
    var image = 'images/inverticon.png';
}

Ответы [ 2 ]

2 голосов
/ 02 мая 2011
if (data.items[i].product.images !== undefined) {
  //do what you will
}

попытка получить доступ к свойству несуществующего объекта вернет undefined.Это, скорее всего, ошибка, которую вы получили?

Знаете ли вы об инструменте веб-инспектора в веб-браузерах?Все они имеют консоль, на которую выводятся любые ошибки.Если вы проверите это, то увидите, что не так.

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

if(data.items[i].product.images !== undefined){
  var image = data.items[i].product.images[0].thumbnails[0].link;

} else {
  var image = 'images/inverticon.png';
}

«не равно неопределенному» эквивалентно высказыванию «определено»

1 голос
/ 02 мая 2011

Есть ли причина, по которой вы не анализируете его в массиве PHP, а затем проверяете?Вы пометили свой пост PHP, так что я предполагаю, что вы это используете.

$myarray = json_decode($json);
if (isset($myarray->items[0]->product->images)) {
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...