我有以下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级对象。但事实并非如此。有人可以帮助我吗?
答案 0 :(得分:1)
var grade1 = body["Teachers' Names"]["Grade I"];
由于您正在访问对象而不是数组,因此应使用属性名称而不是整数索引。
在回复你的评论时,如果你想通过指定int 0而不是字符串"等级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数组而不是对象。
答案 1 :(得分: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
有些人喜欢这些其他路线,如果事情变得太复杂,他们想要一致性,或者通过风格指南测试。
答案 2 :(得分: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"