Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带空格的JSON数据_Json_Node.js - Fatal编程技术网

带空格的JSON数据

带空格的JSON数据,json,node.js,Json,Node.js,我有以下JSON数据结构。我想知道如何提取提供密钥的数据 "Meta Data": { "1. Information": "High School", "2. Name": "St Marys" }, "Teachers' Names": { "Grade I": { "1. English": "Amanda Fernandez", "2. Sociology": "Christina Andrew", "3. Appl

我有以下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”对象中获取这些数据。如何提取上面的一年级英语教师姓名?我试过body[“教师姓名][0],想看看它是否能给我至少一个我反对的分数。但没有。有人能帮我吗

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项,然后将该项用作对象TeachersName中的键

如果你想要“1”。英语“你能做的价值:

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

<>这是非常可怕的,提示你应该考虑用不同的方式构造JSON以更好地满足你的需要。比如使用数组而不是对象。

< P>你可以把关键字称为@ BHSPANCER上面提到的,如果代码包含<代码> <代码>,使用<代码> < /代码> S,反之亦然。您还可以使用
\
转义字符串中的引号,或者使用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

如果事情变得太复杂,需要一致性,或者想要通过样式指南测试,有些人喜欢这些其他方法。

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

const body={
“元数据”:{
“1.信息”:“高中”,
“2.姓名”:“圣玛丽”
},
“教师姓名”:{
“一级”:{
“1.英语”:“阿曼达·费尔南德斯”,
“2.社会学”:“克里斯蒂娜·安德鲁”,
“3.应用科学”:“乔治·比努”
},
“二级”:{
“1.英文”:“Gedfd Hkdfd”,
“2.社会学”:“lksdg klsdfd”,
“3.应用科学”:“其他人”
}
}
}
//要访问已知密钥,您可以这样做

console.log(data['Teachers\'Names']['Grade I']['1.English'])//这将输出“Amanda Fernandez”
我不确定我是否理解您使用单引号字符串并转义撇号的理由。你能说更多为什么这有助于保持一致性吗?@bhspencer这不是一个很好的例子——我将对此进行编辑,感谢
主体
始终处于相同的结构中,还是动态生成?结构相同,但数据是根据我查询API的内容动态生成的。假设您始终具有“元数据”和“教师姓名”,并且只有这些更改的孩子。。。您可以使用
Object.keys
或“for..in”循环遍历属性。如果你想要一个特定的值,你就不应该循环遍历对象的所有属性。是的,我总是会有元数据和教师的名字,而其中的数据会发生变化。您可以给我演示如何使用Object.keys仅拾取第一个名称对象值的示例吗?如果你愿意的话,你可以把上面的数据集当作一个例子。我只对1感兴趣。英语源于第一个教师的名字对象。谢谢你的帮助。谢谢如果您总是选择第一个属性,那么最好使用“for..in”,因为这是一个可以
中断的循环,所以您只能读取第一个属性。请参阅此JSFIDLE以获取示例:这很有效。非常感谢。在我的业务逻辑中,我只想从[Teachers's Names]对象中获取[“1.English”]值,而不指定年级I。换句话说,我只想查看第一个Teachers's Names对象并提取主题教师姓名?有办法吗?@SamT看不到我修改过的答案。