在 JavaScript 中从嵌套 JSON 对象获取键的值

javascriptweb developmentfront end technologyobject oriented programmingjson

在给定的问题陈述中,我们被要求借助 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 键。


相关文章