json.parse第一次运行两次字符串,第二次对象为什么?

时间:2018-05-24 10:24:25

标签: javascript json parsing websocket

我通过websocket(Socket.io)从nodejs服务器发送json字符串,并在客户端(浏览器)上接收它。 但我必须运行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 :(得分:1)

因为你 let data = JSON.stringify(dataString); 这里的字符串

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

为什么不parseJSON你的dataString然后把它作为JSON发送给客户端?

gulp-require-tasks