user2260979
user2260979

Reputation: 59

json.parse run twice first time string, second time object why?

I send json string via websocket (Socket.io )from nodejs server and receive it on Client (Browser). But i have to run the json.parse function twice time to get a object from the received json string. I don`t understand why.

I have a Server which sends a JSON String to Client

dataString = '{"test": [ {"M": "A", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"},{"M": "B", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"}, {"M": "C", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"},{"M": "D", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"}]}'
    let data = JSON.stringify(dataString);  
      socket.emit('test', data );

On Client site i received following string:

"{\"test\": [ {\"M\": \"A\", \"R\": \"e\", \"B\": \"e\", \"C\": \"e\", \"K\": \"e\", \"BD\": \"e\", \"CYC\": \"e\"},{\"M\": \"B\", \"R\": \"e\", \"B\": \"e\", \"C\": \"e\", \"K\": \"e\", \"BD\": \"e\", \"CYC\": \"e\"}, {\"M\": \"C\", \"R\": \"e\", \"B\": \"e\", \"C\": \"e\", \"K\": \"e\", \"BD\": \"e\", \"CYC\": \"e\"},{\"M\": \"D\", \"R\": \"e\", \"B\": \"e\", \"C\": \"e\", \"K\": \"e\", \"BD\": \"e\", \"CYC\": \"e\"}]}\n"

i have to run the json.parse function twice times to get a object. At first execute of json.parse i got a string:

{"test": [ {"M": "A", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"},{"M": "B", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"}, {"M": "C", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"},{"M": "D", "R": "e", "B": "e", "C": "e", "K": "e", "BD": "e", "CYC": "e"}]}

Code on Client Site:

      socket.on('test', function (message) {

      var rec = message;
      var transfer = JSON.parse(rec);
      alert(transfer);
      var transfer = JSON.parse(transfer);
      alert(transfer);

  })

Upvotes: 1

Views: 1482

Answers (1)

MBehtemam
MBehtemam

Reputation: 7919

because of you stringify your string here

  let data = JSON.stringify(dataString);  

why not parseJSON your dataString and then send it as a JSON to client?

let data = JSON.parse(dataString);  
  socket.emit('test', data );

Upvotes: 1

Related Questions