如何访问数组位置内几个json对象的数据

时间:2019-02-18 02:17:20

标签: javascript arrays json

我正在使用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]”。

我在这里缺少什么?

有人可以帮我吗?:(

1 个答案:

答案 0 :(得分:1)

myJSON.courses[0]['java']是带有索引的数组。每个索引在其中保存带有键的对象。您的数组不完全具有您想要的键(数组的键是其索引:0、1等...)

相反,您想访问myJSON.courses[0]['java']数组中对象的所有键。

您可以使用.mapObject.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);