检查json数组是否为空

时间:2014-07-23 14:18:04

标签: jquery arrays json

我有一个小脚本,可以为网店菜单抓取一些JSON内容。有时一个类别中没有产品,所以当数组为空时,没有找到产品"线必须显示。 我用jQuery.isEmptyObject()尝试了这个,但现在文本只显示在WITH产品类别中。除了以上的东西之外,菜单本身也很完美......

所以我的问题是:如何检查json.productsproduct是否为空?如果是这样,您将如何合并它和脚本的结尾?

对你来说可能很容易......我再也看不到了;)

我有什么:

function widget(catId, catHref){   
  var url = catHref + 'page1.ajax?limit=4';
  $.getJSON(url, function (json){     
    var productsHtml = [];

      $.each(json.products, function(index, product){

        var productHtml = '' +
          ..... blablabla .....

        productsHtml.push(productHtml);
      });
      productsHtml = productsHtml.join('');


    if (jQuery.isEmptyObject(json[productsHtml])) {
      $('#widget-products'+catId+' ul').html('No products');
    } else{
      $('#widget-products'+catId+' ul').html(productsHtml);
    }

  });
}

2 个答案:

答案 0 :(得分:1)

您正在使用以下行将数组转换为字符串:

productsHtml = productsHtml.join('');

所以,就这样做:

if ('' == productsHtml) {
    // blah blah

根据对问题的评论和修改进行修改:

要检查json.products是否为空,请检查json.products.length

if (!json.products.length) { // implies json.products is empty

您没有指定product是什么,并且您从未在上面的代码中使用它。如果是数组,请检查product.length。对于字符串,请与''进行比较。如果它是一个对象,则使用jQuery.isEmptyObject(product)

根据评论编辑2:

要检查JSON对象是否具有给定属性,请使用.hasOwnProperty(),如下所示:

if(!json.hasOwnProperty('collection') || !json.collection.hasOwnProperty('products')) {

如果没有collection属性,则此短路,并且您知道没有collection.products。如果它具有collection属性,它将继续运行并检查collection.products属性。

答案 1 :(得分:1)

只需检查数组的长度即可。

if(productsHtml.length>0)
{
//do your stuff here...
}

对于新问题,我已更新您的代码并添加了一些注释,以便您了解: -

$.getJSON(url, function(json) {
    var productsHtml = [];
    //here i am checking json or json.products is not undefined
    if (json && json.products) {
        $.each(json.products, function(index, product) {
            //checking if product is not undefined
            if (product) {

                //do your stuff
                var productHtml = '' +
                    .....blablabla.....

                productsHtml.push(productHtml);
            }
        });
        productsHtml = productsHtml.join('');


        if (jQuery.isEmptyObject(json[productsHtml])) {
            $('#widget-products' + catId + ' ul').html('No products');
        } else {
            $('#widget-products' + catId + ' ul').html(productsHtml);
        }
    }

});