在 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 对象并将其命名为 data。此数据包含 name、age、address 等对象。并且 address 具有 street、city 和 state 等嵌套属性。

步骤 2:现在我们将从上面定义的数据中访问 name 和 street。因此,这里我们将使用点表示法来访问它并在控制台上打印。

步骤 3:在使用点表示法访问 name 和 street 地址后,现在我们将使用括号表示法访问 age 和 state 属性。并在控制台上显示输出。

示例

// Example JSON object
const data = {
  "name": "John",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA"
  }
};
// Accessing nested properties with dot notation
const name = data.name;
const street = data.address.street;
console.log("My name is: " + name + ", Street address is: " + street);
// Accessing nested properties with bracket notation
const age = data["age"];
const state = data["address"]["state"];
console.log("My age is: " + age + ", State is: " + state);

输出

My name is: John, Street address is: 123 Main St
My age is: 30, State is: CA

算法 - 使用函数

步骤 1:声明一个名为 data 的 Json 对象。此数据包含 name、age、address 等属性。并且 address 具有 street、city 和 state 等三个嵌套对象。

步骤 2:创建嵌套 JSON 对象后,我们将定义一个名为 getNestedKeys 的函数来访问 JSON 数据的嵌套键。在此函数内部,我们已启动一个 if 条件,它检查键是否直接在 json 数据中可用,如果条件为真,则返回其值。

步骤 3:如果数据不是直接存在的,并且数据是嵌套的,那么我们将定义一个名为 keys 的变量,它使用点表示嵌套数据。

步骤 4:定义另一个名为 value 的变量,它保存名为 obj 的 json 数据。并初始化一个 for 循环,它将运行直到 keys 的长度。并找出嵌套的键值对。如果找到数据,则返回它,否则返回未定义。

步骤 5:这就是上述函数的工作原理。现在调用创建的函数并打印嵌套键的值。

示例

// Example JSON object
  const data = {
    "name": "John",
    "age": 30,
    "address": {
      "street": "421 Main Street",
      "city": "Anytown",
      "state": "CA"
    }
  };
// function to access the nested properties
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;
  } 
  // Using the getNestedKeys method to get a value for a key
  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 键。

更新于: 2023-08-23

16K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告