json.parse дважды запускает строку первого раза, объект второго раза, почему? - PullRequest
0 голосов
/ 24 мая 2018

Я отправляю строку json через websocket (Socket.io) с сервера nodejs и получаю ее на клиенте (браузере).Но мне нужно дважды запустить функцию json.parse, чтобы получить объект из полученной строки json.Я не понимаю, почему.

У меня есть сервер, который отправляет строку JSON клиенту

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

На сайте клиента я получил следующую строку:

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

Мне нужно дважды запустить функцию json.parse, чтобы получить объект.При первом запуске json.parse я получил строку:

{"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"}]}

Код на сайте клиента:

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

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

  })

1 Ответ

0 голосов
/ 24 мая 2018

из-за вас stringify ваша строка здесь

  let data = JSON.stringify(dataString);  

почему бы не проанализировать вашу dataString и затем отправить ее как JSON клиенту?

let data = JSON.parse(dataString);  
  socket.emit('test', data );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...