javascript - 如何从数组位置内的几个 json 对象访问数据
问题描述
我正在nodejs中制作一个小应用程序,我正在努力尝试从具有以下结构的json打印一些数据来源:
{
"courses": [
{
"java": [
{ "attendees": 43 },
{ "subject": "Crash course" }
]
},
{
"python":
{
"occurrences": [
{ "attendees": 24 },
{ "subject": "another crash course" },
{ "notes": "completed with issues" }
,
{ "attendees": 30 },
{ "subject": "another crash course" },
{ "notes": "completed with issues" }
]
}
}
],
}
如果我想在“java”打印与会者,我会:
console.log(myJSON.courses[0]['java'][0]['attendees']);
哪个打印
43
如果我想打印第二次出现的python课程的笔记,我会这样做:
console.log(myJSON.courses[1]['python']['occurrences'][2]['notes']);
打印:
completed with issues
前面提到的情况是正确的,但我想做的是打印'java'('attendees'和'subject')的键,因为你可以看到Java是一个数组并且在它的独特位置它有两个json对象,我试过:
console.log(myJSON.courses[0]['java'][0].keys;
与
console.log(myJSON.courses[0]['java'].keys;
但它们分别打印“未定义”和“[功能:键]”。
我在这里缺少什么?
有人可以帮我吗?:(
解决方案
myJSON.courses[0]['java']
是一个带索引的数组。每个索引都包含一个带有键的对象。您的数组并不完全具有您想要的键(数组的键是它的索引:0、1 等...)
相反,您希望访问myJSON.courses[0]['java']
数组中对象的所有键。
您可以通过使用.map
和来做到这一点Object.keys
。.map
将允许您获取和转换myJSON.courses[0]['java']
数组中的每个对象。Object.keys()
将允许您从给定对象获取键数组(在您的情况下,您的数组长度为 1,因此您可以访问0
该数组的索引)。
const myJSON = {courses:[{java:[{attendees:43},{subject:"Crash course"}]},{python:{occurrences:[{attendees:24},{subject:"another crash course"},{notes:"completed with issues"},{attendees:30},{subject:"another crash course"},{notes:"completed with issues"}]}}]};
const myKeys = myJSON.courses[0]['java'].map(obj => Object.keys(obj)[0]);
console.log(myKeys);
如果您在数组中的对象中有多个键,您还可以使用.flatMap
(注意浏览器支持):
const myJSON = {courses:[{java:[{attendees:43},{subject:"Crash course"}]},{python:{occurrences:[{attendees:24},{subject:"another crash course"},{notes:"completed with issues"},{attendees:30},{subject:"another crash course"},{notes:"completed with issues"}]}}]};
const myKeys = myJSON.courses[0]['java'].flatMap(Object.keys);
console.log(myKeys);
推荐阅读
- python-3.x - googleapiclient.errors.HttpError - 在 python3 但不是 python2 中返回“字段 [名称] 有问题 [无效项目资源名称]”
- eclipse - 如何使用 Eclipse IDE 调试基于 JavaFX 11 的 Maven 项目 (2019-03)
- python - 使用条件在已排序的 MultiIndex DataFrame 的第一行中设置列值
- java - 从其他活动中读取 SharedPreferences
- node.js - 未能在 Heroku 中推送一些 refs
- excel - Excel VBA 从列表中插入缺失的列?
- java - Spring Requestmapping嵌套复杂对象
- r - 使用 ggplotly rangeslider 进行交互式相对性能(股票收益)
- django - Tinymce 没有呈现形式
- jenkins - Jenkins Crowd2 身份验证在通过 Cloudflare 传递 jira 流量时被破坏