您的位置:

如何用JS判断JSON是否包含某个Key

在Web开发中,经常需要对JSON对象进行处理。在处理过程中,检查一个JSON对象是否包含某个key是一项基本的技能。本文将从多个方面详细介绍如何使用JavaScript判断JSON对象是否包含某个Key。

一、通过in、hasOwnProperty和undefined来判断key是否存在

//判断key是否存在
function hasKey(json, key) {
    return key in json || json.hasOwnProperty(key) || typeof(json[key]) !== "undefined";
}

使用JavaScript中的in、hasOwnProperty和undefined来判断JSON对象中是否存在key,这是最常见的判断方法。in判断方法可以判断JSON对象以及原型链中是否存在key。hasOwnProperty方法只判断当前对象中是否存在key。typeof方法判断当前对象中是否存在key的值,无论值为何种数据类型。

但是,使用in方法判断某个JSON对象的key时有一个注意点,就是需要使用hasOwnProperty方法判断obj是否继承其原型链中的属性和方法。例如:

var obj = { a: 1, b: 2 };
Object.prototype.c = 3;

console.log('a' in obj); // true
console.log('b' in obj); // true
console.log('c' in obj); // true

console.log(obj.hasOwnProperty('a')); // true
console.log(obj.hasOwnProperty('b')); // true
console.log(obj.hasOwnProperty('c')); // false

从这个例子中可以看到,在使用in进行判断时,会沿着对象原型链继续寻找属性。因此,可以看到c这个属性并不属于obj,而是继承来自其原型链。这时候使用hasOwnProperty就能准确判断obj中究竟是否含有这个属性。

二、通过Object.keys方法来判断json包含的所有key

//判断key是否存在
function hasKeys(json, keys) {
    return keys.every(key => Object.keys(json).includes(key));
}

Object.keys方法返回JSON对象中所有自己的key列表。因此,只需要通过Object.keys方法获取json中所有的key列表,再使用includes方法判断列表中是否包含需要判断的key即可。

三、通过JSON Schema来判断json是否包含某个key

//判断key是否存在
function validate(json, schema) {
    const validator = ajv.compile(schema); // 使用ajv模块进行JSON Schema验证
    return validator(json);
}
const schema = {
    type: 'object',
    properties: {
        name: { type: "string" },
        age:  { type: "number" },
    }, 
    required: ["name", "age"],
};

console.log(validate({name: 'Tom', age: 18}, schema)); // true
console.log(validate({name: 'Tom'}, schema)); // false

JSON schema是对JSON对象结构的一种描述语言,可以对JSON对象进行格式验证。使用JSON schema,可以详细描述JSON对象的key类型和必要性。可以使用第三方库如ajv来进行JSON schema的验证。通过这种方法,可以在保证代码不臃肿的同时,极大地提高代码健壮性以及操作完成的准确程度。

四、通过lodash的get方法判断json是否包含某个深层次的key

function hasDeepKey(obj, key) {
    if (_.isObject(obj)) {
        if (_.has(obj, key)) {  // 如果对象包含该属性,则直接返回true
            return true;
        }
        //否则遍历对象的值,查找是否包含该属性
        for (let k in obj) {
            if (hasDeepKey(_.get(obj, k), key)) {
                return true;
            }
        }
    }
    return false;
}

使用这种方法不仅能检查对象是否包含某个key,同时还能够检查对象中嵌套的属性是否包含某个key。这种方法使用了lodash库中的isObject、has、get等方法。

五、通过try catch语句块try访问key,若发生错误则说明key不存在

function tryAccessKey(json, key) {
    try {
        const value = json[key];
        return typeof value !== "undefined";
    }
    catch {
        return false;
    }
}

这种方法通过try catch语句块来捕获错误,来判断json中是否含有某个属性。如果访问key时成功,则说明json对象,而如果发生错误则说明json对象中不包含该属性。

结论

在处理JSON对象时,判断一个JSON对象是否含有某个属性是一项基本技能。通过本文所述的五种方法,可以灵活运用各种方法判断JSON对象的Key是否存在。

如何用JS判断JSON是否包含某个Key

2023-05-20
python判断是否json的简单介绍

本文目录一览: 1、python怎么判断json 字符串含有某一个字符 2、python json快速解析命令 3、py3笔记8:json结构的校验 4、python json 资料判断 true 或

2023-12-08
包含cjson判断key是否存在的词条

本文目录一览: 1、C# json解析时,得到JObject后怎么判断它的某一键值是否存在? 2、如何判断json里面某个key存不存在 3、javascript/jquery如何判断json数据中某

2023-12-08
如何判断JSON中是否存在指定的key

2023-05-19
JS判断对象是否包含某个属性

2023-05-23
JS判断字符串是否包含某个字符

2023-05-22
JS数组是否包含某个元素判断详解

2023-05-23
js判断网页是否存在class值(jquery判断元素是否有

本文目录一览: 1、如何用js判断dom是否有存在某class的值 2、原生js判断某个元素是否有指定的class名的几种方法 3、js 判断元素是否含有class 4、jquery判断 页面是否有c

2023-12-08
Java实现数组是否包含某个值的判断

2023-05-11
JS判断字符串中是否包含某个字符串

2023-05-19
判断数组中是否包含某个元素

2023-05-17
深入探讨Python中判断list中是否包含某个值的方法

2023-05-20
JavaScript中判断数组是否包含某个元素

2023-05-19
Java实现判断Map是否包含中心Key

2023-05-11
如何判断 SQL 字符串是否包含另一个字符串?

2023-05-18
java正则判断,java正则判断是否为日期

2022-11-29
如何使用Map判断key是否存在

2023-05-11
如何判断JavaScript中map中是否有某个键值对?

2023-05-17
详细解析js数组是否包含

2023-05-24
Java判断Map是否含有key

2023-05-19