在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