在Nodejs中将流解析为对象
Posted
技术标签:
【中文标题】在Nodejs中将流解析为对象【英文标题】:Parse stream to object in Nodejs 【发布时间】:2012-12-15 06:57:20 【问题描述】:我正在尝试在 Node.Js 中从 Amazon S3 存储中获取对象。
当我将它保存到文件时,这完美地工作。
amazon.getObject = function ()
var options =
BucketName : 'mybucket',
ObjectName : 'path/to/my.json',
ResponseContentType : 'application/json'
;
s3.GetObject(options, function(err, data)
var fs = require('fs');
var fd = fs.openSync('helloaa.json', 'w+');
fs.writeSync(fd, data.Body, 0, data.Body.length, 0);
fs.closeSync(fd);
);
;
在。 helloaa.json 是:
"hello": 1,
"world": 3
但是。我不想将数据写入磁盘上的文件。
我想用 JSON.parse() 解析这个 json 对象;
当我在那里打印对象时:
s3.GetObject(options, function(err, data)
console.log(JSON.stringify(data));
);
在控制台中是这样的:
"StatusCode":200,"Headers":"x-amz-id-2":"N1gDLPam+fDCLWd9Q2NI62hizH7eXAjg
61oLYOkanLoSlqUlDl6tqasbfdQXZ","x-amz-request-id":"C53957DAF635D3FD","date"
:"Mon, 31 Dec 2012 00:11:48 GMT","last-modified":"Sun, 30 Dec 2012 23:22:57 "etag":"\"8677a54c9b693bb6fc040ede8cc6a\"","accept-ranges":"bytes","co
ntent-type":"application/json","content-length":"176","server":"AmazonS3",
"Body":"0":123,"1":10,"2":32,"3":32,"4":32,"5":32,"6":34,"7":105,"8":100,"
9":34,"10":58,"11":32,"12":49,"13":44,"14":10,"15":32,"16":32,"17":32,"18":
这是什么?
如何解析它?
是流媒体吗?
我可以将流保存到 NodeJs 中的对象吗?
【问题讨论】:
【参考方案1】:你试过data.Body.toString()
吗?
【讨论】:
是的!有用!谢谢你。你能解释一下吗?我不明白行为。 很高兴它起作用了 :) 只是一种预感,我自己并没有用 s3 库做到这一点,但你的输出看起来像一个缓冲区 - 更多信息在这里:nodejs.org/api/buffer.html【参考方案2】:我必须在转换为字符串后解析 JSON:
var fileContents = data.Body.toString();
var json = JSON.parse(fileContents);
console.log(json);
【讨论】:
【参考方案3】:将解析后的响应转换为base64,然后可以直接用作HTML的图像标签中的源。 可以通过 Amazon REST API 进行 Lambda 调用
const AWS = require('aws-sdk');
//*/ get reference to S3 client
var s3 = new AWS.S3();
exports.handler = (event, context, callback) =>
var params =
"Bucket": "bucket-name",
"Key": "object-name"
;
s3.getObject(params, function(err, data)
if(err)
callback(err, null);
else
let image = new Buffer(data.Body).toString('base64');
image = "data:"+data.ContentType+";base64,"+image;
let response =
"statusCode": 200,
"headers":
"Access-Control-Allow-Origin": "*",
'Content-Type': data.ContentType
,
"body":image,
"isBase64Encoded": true
;
callback(null, response);
);
;
【讨论】:
以上是关于在Nodejs中将流解析为对象的主要内容,如果未能解决你的问题,请参考以下文章