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

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"]
      },
}

上述问题的逻辑

通过使用点表示法和括号表示法,以及嵌套的JSON对象,可以在Javascript中最简单地访问嵌套的JSON对象的键值。

因此,乍一看,我们将使用嵌套的JSON数据结构来访问其键。访问对象键有两种方式:一种是点表示法,另一种是括号表示法。我们还可以创建一个函数来访问键。

以下是访问带有和不带函数的嵌套JSON对象的键的算法和代码:

方法1-不带函数

步骤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

方法2-带有函数

步骤1: 声明一个名为data的Json对象。这个data包含了name,age和address等属性。而address有三个嵌套对象,分别是street,city和state。

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

步骤3: 如果数据不是直接存在而是嵌套的,则我们将定义一个名为keys的变量,该变量用点表示嵌套的数据。

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

步骤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键。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程