在 JavaScript 中从嵌套 JSON 对象获取键的值
在给定的问题陈述中,我们被要求借助 JavaScript 功能从嵌套 JSON 对象获取键的值。在 Javascript 中,我们可以借助点符号或括号符号解决并访问 JSON 数据对象。
在开始为给定的问题编写代码之前,让我们先了解一下 JSON 对象到底是什么:
什么是 JSON 和嵌套 JSON 对象?
JSON 的全称是 Javascript 对象符号。它是一种标准的基于文本的格式,用于显示结构化数据。它主要用于在 Web 应用程序中传输数据,这意味着我们可以将数据发送到服务器,服务器可以以 JSON 格式发回数据。
嵌套 JSON 对象意味着 JSON 文件中存在的对象可以嵌套在其他对象中。并且相同的字段名称也可以位于嵌套对象中。但每个嵌套对象都应该有一个唯一的路径。
{ "name": "Super Hero", "homeTown": "Metro City", "birthYear": 2000, "active": true, "members": [ { "name": "Molecule Man", "age": 29, "powers": ["Radiation resistance", "Turning tiny", "Radiation blast"] }, { "name": "Madame Uppercut", "age": 39, "powers": [ "Million tonne punch", "Damage resistance"] }, }
上述问题的逻辑
在 Javascript 中,使用点符号和括号符号访问嵌套 JSON 对象中键值的最简单方法。
因此,乍一看,我们将使用嵌套 JSON 数据结构来访问其键。访问对象键有两种方法:第一种是点符号,第二种是括号符号。我们还可以创建一个函数来访问键。
以下是使用和不使用函数访问嵌套 JSON 对象的键的算法和代码:
算法 - 不使用函数
步骤 1:声明一个 Json 对象并将其命名为数据。此数据包含名称、年龄、地址等对象。地址具有街道、城市和州等嵌套属性。
步骤 2:现在我们将从上面定义的数据中访问名称和街道。因此,我们将在这里使用点符号来访问它并在控制台上打印。
步骤 3:在使用点符号访问名称和街道地址后,现在我们将借助括号符号访问年龄和州属性。并在控制台上显示输出。
示例
// 示例 JSON 对象 const data = { "name": "John", "age": 30, "address": { "street": "123 Main St", "city": "Anytown", "state": "CA" } }; // 使用点符号访问嵌套属性 const name = data.name; const street = data.address.street; console.log("我的名字是:" + name + ", 街道地址是:" + street); // 使用括号符号访问嵌套属性 const age = data["age"]; const state = data["address"]["state"]; console.log("我的年龄是:" + age + ", 州是:" + state);
输出
我的名字是:John,街道地址是:123 Main St 我的年龄是:30,州是:CA
算法 - 使用函数
步骤 1: 声明一个名为 data 的 Json 对象。此数据包含名称、年龄、地址等属性。并且地址有三个嵌套对象,如街道、城市和州。
步骤 2: 创建嵌套 JSON 对象后,我们将定义一个名为 getNestedKeys 的函数来访问 JSON 数据的嵌套键。在这个函数中,我们启动了一个 if 条件,即检查键是否直接存在于 json 数据中,如果条件为真,则返回其值。
步骤 3: 如果数据不是直接存在的,并且数据是嵌套的,那么我们将定义一个名为 keys 的变量,它用点表示嵌套数据。
步骤 4: 定义另一个名为 value 的变量,它保存名为 obj 的 json 数据。并初始化一个 for 循环,它将运行直到键的长度。并找出嵌套的键值对。如果找到数据,则返回它,否则返回未定义。
步骤 5: 这就是上述函数的工作方式。现在调用创建的函数并打印嵌套键的值。
示例
// Example JSON object const data = { "name": "John", "age": 30, "address": { "street": "421 Main Street", "city": "Anytown", "state": "CA" } }; // 访问嵌套属性的函数 function getNestedKeys(obj, key) { if (key in obj) { return obj[key]; } const keys = key.split("."); let value = obj; for (let i = 0; i < keys.length; i++) { value = value[keys[i]]; if (value === undefined) { break; } } return value; } // 使用 getNestedKeys 方法获取键的值 const name = getNestedKeys(data, "name"); const age = getNestedKeys(data, "age"); const street = getNestedKeys(data, "address.street"); const state = getNestedKeys(data, "address.state"); console.log("Name: ", name); console.log("Age: ", age); console.log("Street: ",street); console.log("State: ",state);
输出
Name: John Age: 30 Street: 421 Main Street State: CA
复杂性
上述算法使用点符号和括号符号,其时间复杂度平均为 O(1)。这是因为我们只使用一种符号(点符号或括号符号)访问对象属性,这涉及在哈希表中直接查找对象。因此哈希表具有恒定的时间复杂度。而函数算法使用 O(n) 时间来执行函数,其中 n 是 JSON 对象中的属性数。因为函数需要遍历每个对象来查找键。并且此方法的空间复杂度也是 O(n)。因为它是一个递归调用,它会向堆栈添加一个新的调用框架。
结论
在此代码中,我们实现了访问键值的不同方式,并使用函数来访问键。在上述算法中,我们访问 JavaScript 对象中的嵌套属性,这是一种快速有效的方法,具有恒定的时间复杂度。因为点符号和括号符号。这些符号被广泛用于访问 JSON 键。