带空格的JSON数据

问题描述 投票:0回答:3

我有以下JSON数据结构。我想知道如何提取提供密钥的数据。

"Meta Data": {
    "1. Information": "High School",
    "2. Name": "St Marys"
},
"Teachers' Names": {
    "Grade I": {
        "1. English": "Amanda Fernandez",
        "2. Sociology": "Christina Andrew",
        "3. Applied Science": "George Binu"
    },
    "Grade II": {
        "1. English": "Gedfd Hkdfd",
        "2. Sociology": "lksdg klsdfd",
        "3. Applied Science": "some one else"
    }
  }
}

我使用nodejs并在请求模块下的'body'对象中获取此数据。如何提取上面的一年级,英语教师姓名?我尝试了身体[“教师姓名] [0],看看它是否会给我至少一级的I级对象。但事实并非如此。有人可以帮助我吗?

json node.js
3个回答
0
投票

有多种方法可以实现相同的目标(一如既往)。但要在这里回答你的问题,我们采用一种方法来实现你的目标。

const body = {
  "Meta Data": {
    "1. Information": "High School",
    "2. Name": "St Marys"
  },
  "Teachers' Names": {
    "Grade I": {
      "1. English": "Amanda Fernandez",
      "2. Sociology": "Christina Andrew",
      "3. Applied Science": "George Binu"
    },
    "Grade II": {
      "1. English": "Gedfd Hkdfd",
      "2. Sociology": "lksdg klsdfd",
      "3. Applied Science": "some one else"
    }
  }
}

// to access known keys you could do it like this
console.log(data['Teachers\' Names']['Grade I']['1. English']) // this will output "Amanda Fernandez"

1
投票
var grade1 = body["Teachers' Names"]["Grade I"];

由于您正在访问对象而不是数组,因此应使用属性名称而不是整数索引。

在回复您的评论时,如果您只想通过指定int 0而不是字符串“Grade I”来获得一年级,您可以执行以下操作:

var teachersNames = body["Teachers' Names"];
var first = teachersNames[Object.keys(teachersNames)[0]];

在这里,您使用函数Object.keys来获取属性名称和数组,然后获取该数组中的第0个项目,然后使用该项目作为对象teachersNames的键。

如果您想要“1.英语”值,您可以这样做:

var result = first["1. English"];

这非常令人毛骨悚然,并暗示您应该考虑以不同方式构建Json以更好地满足您的需求。比如usitng数组而不是对象。


0
投票

如果密钥包含",您可以使用's将密钥称为上面的@bhspencer提及,反之亦然。您还可以使用\转义字符串中的引号,或者使用es6模板文字(如果可用)。

var str = `"something" 'here'`;
var body = {};
body[str] = 1;

var grade1 = body['"something" \'here\'']; // works
var grade1 = body[`"something" 'here'`]; // if you have es6 template literals

有些人喜欢这些其他路线,如果事情变得太复杂,他们想要一致性,或通过风格指南测试。

© www.soinside.com 2019 - 2024. All rights reserved.