【问题标题】:Check if key exists in JSON object using jQuery使用 jQuery 检查 JSON 对象中是否存在键
【发布时间】:2012-01-17 10:27:42
【问题描述】:

我已经完成了 AJAX 验证,验证后的消息以 JSON 数组的形式返回。因此,我需要检查诸如 nameemail 之类的键是否在该 JSON 数组中。

{
    "name": {
        "isEmpty": "Value is required and can't be empty"
    },
    "email": {
        "isEmpty": "Value is required and can't be empty"
    }
}

仅当键名存在时,我才需要将错误消息写入name 字段。

以下是输入字段时显示错误的代码

if (obj['name']'isEmpty'] != "") {                                 
   $('#name').after(c1 + "<label class='error'>" + obj['name']['isEmpty'] + "</label>");
}                                       
if (obj['email']['isEmpty'] != "" ) { 
   $('#email').after(c4 + "<label class='error'>" + obj['email']['isEmpty'] + "</label>");
}

但是如果输入了name字段,它就不会在JSON数组中。 所以检查语句

if (obj['name']['isEmpty'] != "")

将导致以下错误:

找不到obj.name


数组中不必有键 name。同时,如果数组拥有键name,我需要检查这个以显示错误。

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    使用 JavaScript 的 hasOwnProperty() 函数:

    if (json_object.hasOwnProperty('name')) {
        //do struff
    }
    

    【讨论】:

    • 它返回 false 要么数组有键 'name' 也没有键 'name'。根据用户填写表格,数组有元素名称或电子邮件
    • 如果键存在则返回 true,如果不存在则返回 false
    • @Dau,为了完整起见,它实际上检查提供的属性是否存在于该对象的原型链中的链接处。由于 javascript 是原型的,因此其他对象可以通过继承其原型从其他对象扩展。检查hasOwnProperty 可确保您不会从对象原型链中的更高层“挖掘”项目。
    【解决方案2】:

    不需要 JQuery 就可以了

    if(yourObject['email']){
     // what if this property exists.
    }
    

    email 的任何值一样,将返回true,如果没有此类属性或该属性值为nullundefined,将返回false

    【讨论】:

    • 如果email 的值是0,或者false,或者是一个空字符串呢?该属性确实存在,但这会说它不存在。
    • 这也会导致yourObject['toString'] 等内容的误报。使用hasOwnProperty
    • hasownproperty 结果为 false,尽管名称存在与否
    • 而不是 if(obj['name']['isEmpty']!="") 使用 if(obj.hasOwnProperty('name') && obj.name.hasOwnProperty('isEmpty') && obj.name.isEmpty != "")
    【解决方案3】:
    if(typeof theObject['key'] != 'undefined'){
         //key exists, do stuff
    }
    
    //or
    
    if(typeof theObject.key != 'undefined'){
        //object exists, do stuff
    }
    

    我写在这里是因为似乎没有人给出正确的答案..

    我知道它很旧......

    有人可能会质疑同样的事情..

    【讨论】:

    • 谢谢,非常有用的解决方案。
    【解决方案4】:

    如果你有一个数组

    var subcategories=[{name:"test",desc:"test"}];
    
    function hasCategory(nameStr) {
            for(let i=0;i<subcategories.length;i++){
                if(subcategories[i].name===nameStr){
                    return true;
                }
            }
            return false;
        }
    

    如果你有一个对象

    var category={name:"asd",test:""};
    
    if(category.hasOwnProperty('name')){//or category.name!==undefined
       return true;
    }else{
       return false;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-15
      • 2017-09-10
      • 2013-09-26
      • 1970-01-01
      • 2020-06-18
      • 2020-07-11
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多