在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是否存在。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/232564.html
微信掃一掃
支付寶掃一掃