我正在使用nodejs制作一个小应用程序,我正在努力尝试从具有以下结构的json打印一些可靠的数据:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="selector">
<option value="book">Book</option>
<option value="journal">Journal</option>
<option value="newspaper">Newspaper</option>
</select>
<input type="text" class="form-control" id="searchbox" placeholder="Enter book ID" size="20">
如果我想在“ java”上打印与会者,我会这样做:
{
"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" }
]
}
}
],
}
可打印
console.log(myJSON.courses[0]['java'][0]['attendees']);
如果我想打印python课程第二次出现的笔记,我会这样做:
43
打印:
console.log(myJSON.courses[1]['python']['occurrences'][2]['notes']);
前面提到的情况是正确的,但是我要做的是打印'java'的键('attendedees'和'subject'),因为您可以看到Java是一个数组,并且在其唯一位置我尝试了两个json对象:
completed with issues
和
console.log(myJSON.courses[0]['java'][0].keys;
但是它们分别打印“ undefined”和“ [Function:keys]”。
我在这里缺少什么?
有人可以帮我吗?:(
答案 0 :(得分:1)
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);