如何在jQuery中判断JSON对象是否为空

4

I have the following JSON:

{
    "meta": {
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null,
        "total_count": 0
    },
    "objects": []
}

我对对象很感兴趣:我想知道对象是否为空并显示一个提示框:
类似这样的代码:
success: function (data) {
    $.each(data.objects, function () {
        if data.objects == None alert(0)
        else :alert(1)
    });

你是否控制生成JSON的服务器端代码?如果是这样,只需将某个属性设置为零即可。 - Blazemonger
6个回答

9
我不知道你所说的空对象是什么意思,但如果你考虑一个没有任何属性或方法的对象,那么它就是一个空对象。
{}

作为空对象,我建议你使用以下代码:

作为空对象,我建议您使用下面的代码

var obj = {};

if (Object.keys(obj).length === 0) {
    alert('empty obj')
}

8
使用数组的 length 属性:
// note: you don't even need '== 0'

if (data.objects.length == 0) {
  alert("Empty");
}
else {
  alert("Not empty");
}

有比这更健壮的答案。最好不要加上 == 0,因为如果 objects 不是数组,你会得到意想不到的结果。@GrantU 考虑检查其他内容。 - tybro0103
@tybro0103 我不这么认为。如果服务器在JSON输出中始终将“objects”键包含为数组,则检查是不必要的。 - ComFreek
我猜这取决于你对服务器的信任程度。 - tybro0103

6

这是最佳方式:

if(data.objects && data.objects.length) {
  // not empty
}

它是出于某种原因而成为最佳实践——它不仅检查对象是否为空,还检查以下内容:
  1. objects 存在于 data
  2. objects 是一个数组
  3. objects 是一个非空数组
所有这些检查都很重要。如果你没有检查 objects 是否存在并且是一个数组,那么当 API 发生变化时,你的代码就会崩溃。

2
您可以使用length属性来测试数组是否有值:
if (data.objects.length) {
    $.each(data.objects, function() {
        alert(1)
    });
} 
else {
    alert(0);
}

1

这是我做的事情,感谢@GilbertSun,在一个jsonp回调中当我得到一个未定义的data.objects.length时。

success: function(data, status){
                  if (Object.keys(data).length === 0) {
                      alert('No Monkeys found');
                    }else{     
                      alert('Monkeys everywhere');
                    }
    }

-1

Js

var myJson = {
   a:[],
   b:[]
}

if(myJson.length == 0){
   //empty
} else {
  //No empty
}

仅限 jQuery:

$(myJson).isEmptyObject(); //Return false
$({}).isEmptyObject() //Return true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接