Javascript 当对象名称未知时,从嵌套JSON对象中提取数据

Javascript 当对象名称未知时,从嵌套JSON对象中提取数据,javascript,json,api,Javascript,Json,Api,我从一个映射API(返回JSON)中获取数据,幸运的是,作为一个JSON noob,我过去一直想操作的对象已经用快捷方式命名 然而,今天我想从一个随机生成的数字命名的对象中获取数据,当我获取它时,我不知道它的名称。所以我想写: 下面是JSON的一个示例。我试图获取的数据是苏格兰议会选区的名称。因此,我正在寻找一个包含[type_name]=“苏格兰议会选区”的对象。然后我想在for name中查找键/值对(在本例中为格拉斯哥开尔文) 在本例中,该对象具有随机生成的名称134955,但如果我事先不

我从一个映射API(返回JSON)中获取数据,幸运的是,作为一个JSON noob,我过去一直想操作的对象已经用快捷方式命名

然而,今天我想从一个随机生成的数字命名的对象中获取数据,当我获取它时,我不知道它的名称。所以我想写:

下面是JSON的一个示例。我试图获取的数据是苏格兰议会选区的名称。因此,我正在寻找一个包含[type_name]=“苏格兰议会选区”的对象。然后我想在for name中查找键/值对(在本例中为格拉斯哥开尔文)

在本例中,该对象具有随机生成的名称134955,但如果我事先不知道,如何将javascript写入find中的作用域(如果它具有该类型的名称),并因此拉出该名称?对象并不总是名称、编号和顺序,所以我不能只说“获取第一个对象”

这应该做到:

Object.values(data.areas)
  .filter(a=>a.type_name=="Scottish Parliament constituency")
  .map   (a=>a.name)
const数据={
“wgs84_lat”:55.861509653107056,
“coordsyst”:“G”,
“快捷方式”:{
“WMC”:14425,
“病房”:151284,
“理事会”:2579
},
“wgs84_lon”:-4.246702245398941,
“邮政编码”:“G1 1BX”,
“东汀”:259485,
“区域”:{
"134955": {
“母区”:148764,
“高世代”:40,
“所有名称”:{},
“id”:134955,
“代码”:{
“gss”:“S16000117”,
“单位id”:“41386”
},
“名称”:“格拉斯哥开尔文”,
“国家”:“S”,
“类型名称”:“苏格兰议会选区”,
“低代”:15,
“国家名称”:“苏格兰”,
“类型”:“SPC”
},
"2579": {
“父区域”:空,
“高世代”:40,
“所有名称”:{},
“id”:2579,
“代码”:{
“gss”:“S12000049”,
“地方当局规范”:“GLG”,
“单位id”:“30631”
},
“名称”:“格拉斯哥市议会”,
“国家”:“S”,
“类型名称”:“单一权限”,
“低代”:36,
“国家名称”:“苏格兰”,
“类型”:“UTA”
},
"151284": {
“母区”:2579,
“高世代”:40,
“所有名称”:{},
“id”:151284,
“代码”:{
“gss”:“S13002976”,
“单位id”:“43375”
},
“名称”:“安德斯顿/城市/约克希尔”,
“国家”:“S”,
“类型名称”:“统一管理病房(UTW)”,
“低世代”:31,
“国家名称”:“苏格兰”,
“类型”:“UTW”
},
"14425": {
“父区域”:空,
“高世代”:40,
“所有名称”:{},
“id”:14425,
“代码”:{
“gss”:“S14000029”,
“单位id”:“33920”
},
“名称”:“格拉斯哥市中心”,
“国家”:“S”,
“类型名称”:“英国议会选区”,
“低代”:2,
“国家名称”:“苏格兰”,
“类型”:“WMC”
}
}
};
console.log(Object.values(data.areas).filter(a=>a.type\u name==“苏格兰议会选区”).map(a=>a.name))
这应该可以做到:

Object.values(data.areas)
  .filter(a=>a.type_name=="Scottish Parliament constituency")
  .map   (a=>a.name)
const数据={
“wgs84_lat”:55.861509653107056,
“coordsyst”:“G”,
“快捷方式”:{
“WMC”:14425,
“病房”:151284,
“理事会”:2579
},
“wgs84_lon”:-4.246702245398941,
“邮政编码”:“G1 1BX”,
“东汀”:259485,
“区域”:{
"134955": {
“母区”:148764,
“高世代”:40,
“所有名称”:{},
“id”:134955,
“代码”:{
“gss”:“S16000117”,
“单位id”:“41386”
},
“名称”:“格拉斯哥开尔文”,
“国家”:“S”,
“类型名称”:“苏格兰议会选区”,
“低代”:15,
“国家名称”:“苏格兰”,
“类型”:“SPC”
},
"2579": {
“父区域”:空,
“高世代”:40,
“所有名称”:{},
“id”:2579,
“代码”:{
“gss”:“S12000049”,
“地方当局规范”:“GLG”,
“单位id”:“30631”
},
“名称”:“格拉斯哥市议会”,
“国家”:“S”,
“类型名称”:“单一权限”,
“低代”:36,
“国家名称”:“苏格兰”,
“类型”:“UTA”
},
"151284": {
“母区”:2579,
“高世代”:40,
“所有名称”:{},
“id”:151284,
“代码”:{
“gss”:“S13002976”,
“单位id”:“43375”
},
“名称”:“安德斯顿/城市/约克希尔”,
“国家”:“S”,
“类型名称”:“统一管理病房(UTW)”,
“低世代”:31,
“国家名称”:“苏格兰”,
“类型”:“UTW”
},
"14425": {
“父区域”:空,
“高世代”:40,
“所有名称”:{},
“id”:14425,
“代码”:{
“gss”:“S14000029”,
“单位id”:“33920”
},
“名称”:“格拉斯哥市中心”,
“国家”:“S”,
“类型名称”:“英国议会选区”,
“低代”:2,
“国家名称”:“苏格兰”,
“类型”:“WMC”
}
}
};
console.log(Object.values(data.areas).filter(a=>a.type_name==“苏格兰议会选区”).map(a=>a.name))
除上述内容外,您还可以使用“查找”
const element = Object.keys(x.areas).find(item => x.areas[item].type_name === "Scottish Parliament constituency");

const obj = x.areas[element]; //Complete Object on matched type_name