【问题标题】:nodejs how to get JSON instead of Buffer from aws s3 bucketnodejs如何从aws s3存储桶获取JSON而不是Buffer
【发布时间】:2020-05-26 18:35:02
【问题描述】:

我有一个 .json 文件存储在 S3 存储桶中, 现在我想用 nodejs 下载 json 文件。 我写了以下代码:

const bucket = "s3bucketname";

const AWS = require('aws-sdk');
const S3= new AWS.S3();
exports.handler = async (event, context, callback) => {
    var transcript = await download();
    console.log(transcript);
}

async function download(){
  try {
    // Converted it to async/await syntax just to simplify.
    const data = await S3.getObject(
    {   Bucket: bucket, 
        Key: "Test.json",
        //ResponseContentType: 'application/json'
    }).promise();

    console.log(data);
    return {
      statusCode: 200,
      body: JSON.stringify(data)
    }
  }
  catch (err) {
    return {
      statusCode: err.statusCode || 400,
      body: err.message || JSON.stringify(err.message)
    }
  }
}

我的回复是这样的: AcceptRanges: '字节', 最后修改时间:2020-02-07T08:04:25.000Z, 内容长度:12723, ETag: '"ea7de645f93c45b3jkj4e7ffjdsf"', ContentType: '应用程序/八位字节流', 元数据:{}, 正文:缓冲区 7b 0d ...

如果我通过以下工具转换它,我会在正文中从我的 JSON 中获得一个缓冲区: https://onlineutf8tools.com/convert-bytes-to-utf8

我得到了我想要的 JSON 字符串。我如何在 Javascript/nodejs 中做到这一点? 我不需要缓冲区,我需要字符串中的 JSON。我尝试了不同的方法,但还是不行。

【问题讨论】:

    标签: javascript node.js json amazon-web-services amazon-s3


    【解决方案1】:

    我没有为@Ashish Modi 的回答添加评论的声誉。 data.Body.toString('utf-8') 会将其转换为纯字符串而不是 json 对象。
    如果您想拥有 json 对象,您可以通过以下方式将字符串转换为 json 对象 JSON.parse(obj.Body.toString('utf-8'))

    【讨论】:

    • 确认这也适用于我,如果你从 json 文件返回一个 json 对象数组,如果有意义的话,它也会解析它,它会将它解析为一个数组。
    【解决方案2】:

    您需要执行data.Body.toString('utf-8') 从缓冲区获取正确的 json(字符串版本)。

    【讨论】:

    • 如果我改变 body: JSON.stringify(data.toString()), 我得到 body: ' " [object Object]" ' 如何访问 json 的字符串版本?跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多