带空格的JSON数据

时间:2017-12-16 00:13:51

标签: 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. Applied Science": "George Binu"
    },
    "Grade II": {
        "1. English": "Gedfd Hkdfd",
        "2. Sociology": "lksdg klsdfd",
        "3. Applied Science": "some one else"
    }
  }
}

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

3 个答案:

答案 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"