【问题标题】:How to select data from a JSON in AWS Lambda如何在 AWS Lambda 中从 JSON 中选择数据
【发布时间】:2022-01-08 15:25:34
【问题描述】:

我有一个 AWS Lambda 函数,它从 S3 读取 CSV 数据并将其转换为 JSON。 代码:

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const csv = require('csv-parser');
const bucket = 'awslambdabuckets';
const objectkey = 'claimant_record.csv';
const params = { Bucket: bucket, Key: objectkey };
const results = [];

exports.handler = function (event, ctx, callback) {
    try {
        const file = s3.getObject(params).createReadStream();

        file
            .pipe(csv())
            .on('data', function (data) {
                results.push(data);
                // console.log(results)
                callback(null, results);
            })
            .on('end', () => {
                // console.log(results);
                callback(null, results);
            });
    } catch (err) {
        // console.log(err);
        callback(Error(err));
    }
    
};

输出:

[
  {
    "ID": "678980",
    "fName": "Michelle",
    "lName": "Humbert",
    "mName": "K.",
  },
  {
    "ID": "705264",
    "fName": "John",
    "lName": "Turner",
    "mName": "NULL",
  },
  {
    "ID": "720367",
    "fName": "Timothy",
    "lName": "Labonte",
    "mName": "E.",
  }
]

问题:如何在 JSON 中仅访问每个客户的 ID?

我尝试过的步骤:

     callback(Error(err));
    }
    
};
for (var result of results) {
     console.log(result.ID)
}

输出:Null

【问题讨论】:

  • 你能得到一个对象数组吗?你想在哪里运行循环?
  • 回调后(Error(err)); }.

标签: node.js amazon-web-services aws-lambda


【解决方案1】:

您可能需要对代码进行更改。使用 cbs 时不需要使用 try/catch。

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const csv = require('csv-parser');
const bucket = 'awslambdabuckets';
const objectkey = 'claimant_record.csv';
const params = { Bucket: bucket, Key: objectkey };
const results = [];

exports.handler = function (event, ctx, callback) {
        const file = s3.getObject(params).createReadStream();

        file
            .pipe(csv())
            .on('data', function (data) {
                results.push(data);
                // console.log(results)
                callback(null, results);
            })
            .on('end', () => {
                // console.log(results);
                // once you get the results
                // try looping here.
                for (const result of results) {
                    console.log(result);
                }
                callback(null, results);
            })
            .on('error', () => {
                // catch errors here
            })

};

您的 o/p 为 null 的原因是,它是在流中的数据完成之前执行的。这是一个常见的问题,因此请确保以您可以按顺序收到结果的方式放置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2011-05-07
    • 1970-01-01
    • 2020-03-24
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多