Home > Mobile >  How do I receive multiple JSON objects and use each one seperately?
How do I receive multiple JSON objects and use each one seperately?

Time:08-11

I am trying to receive JSON objects via a websocket server. And I receive one JSON object every second that I want to be able to use each one separately as it gives a status on whether someone is active or not. However, whenever I try and store all the JSON's into a data structure only the final JSON I receive will be stored the others get deleted.

So my question is: is there a way to store JSON into a data structure whilst receiving it?

This is the JSON I receive looks something like this: {"studentNum":"21127985","active":false,"currentScore":0}

here is the code for receiving the json from the server:

const WebSocket = require('ws');

// const serverAddress = "ws://127.0.0.1:5000";

const serverAddress = ' *SERVER NAME*';

const ws = new WebSocket(serverAddress, {

    headers: {

        "user-agent": "Mozilla"

    }

});

ws.on('open', function () {
});

ws.on('message', function (msg) {

    fs = require('fs')

    console.log(msg.toString())

    var obj = JSON.parse(msg);

    /* convert buff to string

    const json = JSON.parse(file.toString())

    json.push(msg);*/

    var writerStream = fs.createWriteStream('output.json')

    writerStream.write(msg, 'UTF-8')

    writerStream.end();


    writerStream.on('finish', function () {


    });

    writerStream.on('error', function (err) {

        console.log(err.stack);

    });
});   

CodePudding user response:

you can put fs outside of your WS message callback

const WebSocket = require('ws');

fs = require('fs');

var writerStream = fs.createWriteStream('output.json')

const serverAddress = "ws://127.0.0.1:5000";

const serverAddress = ' *SERVER NAME*';

const ws = new WebSocket(serverAddress, {

headers: {

    "user-agent": "Mozilla"

   }

});

ws.on('open', function () {
});

ws.on('message', function (msg) {

    writerStream.write(msg, 'UTF-8')

    writerStream.on('error', function (err) {

        console.log(err.stack);

     });
 });

Or alternatively you can write file in chunks i.e. store 10 messages in an array and write it using fs.appendFile function.

  • Related