【问题标题】:How to acces to specific properties into a JSON or Object in JavaScript如何在 JavaScript 中访问 JSON 或对象的特定属性
【发布时间】:2019-06-01 14:45:35
【问题描述】:

我正在使用 express 和 node-xlsx 模块在 Nodejs 中制作应用程序,我想做的是让用户能够上传 xlsx 文件(必须具有两列的特定格式),然后服务器读取它并对文件的每一行进行处理。

(我的测试文件示例,分别是 A 列和 B 列):

    Johny Wilson    | jonhny@email.com
    Andrew Jehnsen  | andrew@example.com
    Billy Soon      | billy@mail.com

为了做到这一点,我决定使用 node-xlsx 模块,在使用以下代码读取文件后:

    var xlsx = require('node-xlsx');

    router.post('/enviar', upload.single("lista"),(req, res, next) =>{
        //dir is the path of the xlsx file
        const workSheetsFromFile = xlsx.parse(dir); 
        res.send(workSheetsFromFile);
    });

返回一个如下所示的对象:

    [
        {
            "name": "Hoja1",
            "data": [
                [
                    "Johny Wilson",
                    "jonhny@email.com"
                ],
                [
                    "Andrew Jehnsen",
                    "andrew@example.com"
                ],
                [
                    "Billy Soon",
                    "billy@mail.com"
                ]
            ]
        }
    ]

如您所见,模块返回所有文件的数据,包括工作表的详细信息(在这种情况下只有一个),我只想访问包含键和值的“数据”数组来处理它们。

我已经尝试在数据数组上循环:

    workSheetsFromFile.data.forEach((element) =>{
        console.log(element);
    });

    workSheetsFromFile[data].forEach((element) =>{
        console.log(element);
    });

    workSheetsFromFile['data'].forEach((element) =>{
        console.log(element);
    });

但他们都只是向我发送了一个错误,例如“无法读取未定义的属性 'forEach'”或“未定义数据”:(

目前,我希望通过这几行代码迭代数据数组并打印每对键和值,因此一旦修复,在此循环中处理每个键和值以发送自动邮件。

【问题讨论】:

标签: javascript node.js json object


【解决方案1】:

您在这里拥有的似乎是一个对象数组,而不是对象本身!

试试

 workSheetsFromFile[0].data.forEach((element) => {
     console.log(element);
 });

如果元素比较多,可以考虑先循环数组,再提取数据

【讨论】:

    【解决方案2】:
    const structuredData = workSheetsFromFile[0].data.map(res => {
         return res
    });
    

    【讨论】:

      【解决方案3】:
      workSheetsFromFile.forEach(sheet => {
         //access data
         console.log(sheet.data)
      
         //or
      
         sheet.data.forEach(data => {
         //access each data
         console.log(data)
         })
      })
      

      【讨论】:

      • 是的,当然。不是很好的代码实践,但它也能完美运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多