首页 > 解决方案 > 如何从数组位置内的几个 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;

但它们分别打印“未定义”和“[功能:键]”。

我在这里缺少什么?

有人可以帮我吗?:(

标签: javascriptarraysjson

解决方案


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);


推荐阅读