Parse stream to object in Nodejs

21,297

Solution 1

Have you tried data.Body.toString()?

Solution 2

I had to parse the JSON after converting to string:

    var fileContents = data.Body.toString();
    var json = JSON.parse(fileContents);
    console.log(json);
Share:
21,297
Samuel Ondrek
Author by

Samuel Ondrek

Updated on January 02, 2021

Comments

  • Samuel Ondrek
    Samuel Ondrek over 3 years

    I am trying Get an object from Amazon S3 storage in Node.Js.

    And this perfectly works when I am saving it to a file.

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

    In. helloaa.json is:

    {
        "hello": 1,
        "world": 3
    }
    

    But. I don't want to write data to file on my disk.

    I want parse this json to object with JSON.parse();

    When I print object there with:

        s3.GetObject(options, function(err, data) {
            console.log(JSON.stringify(data));
        });
    

    In console is this:

    {"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":
    

    What is it?

    How can I parse it?

    Is it stream?

    Can I save stream to object in NodeJs?

  • Samuel Ondrek
    Samuel Ondrek over 11 years
    Yes! It works! Thank you. Can you explain it? I don't understand behavior.
  • hunterloftis
    hunterloftis over 11 years
    Glad it worked :) just a hunch, I haven't done that with the s3 library myself, but your output looks like a Buffer - more info here: nodejs.org/api/buffer.html