繁体   English   中英

检查json数组是否为空

[英]Check if json array is empty

我有一个小脚本,可以为网上商店菜单获取一些JSON内容。 有时类别中没有产品,因此当数组为空时,必须显示“未找到产品”行。 我尝试使用jQuery.isEmptyObject()进行此操作,但是现在仅在其中包含产品的类别中显示文本。 菜单本身除了上面的东西外完美地工作...

所以我的问题是:如何检查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);
    }

  });
}

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

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属性。

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

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);
        }
    }

});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM