nodejs JSON.parse(data_from_TCP_socket)

我在nodejs服务器上使用require('net')的代码,所以它是TCP,客户端是AS3并正确发送数据:

var server = net.createServer(function(socket) { socket.setEncoding("utf8"); clients.push(socket); function broadcast(message) { clients.forEach(function (client) { client.write(message); }); } socket.on('data', function(dt){ var rdt = dt; var srdt = rdt.toString(); var ordt = JSON.parse(srdt); console.log(ordt); broadcast(ordt); }); socket.on('end', function(){...}); }) 

它不能parsing数据并给出各种错误。 我能理解的是,我从客户端获得“缓冲区”。 但是我需要保持套接字打开,所以循环缓冲区的常见解决scheme将不适用于我。

请帮我解决这个问题。

顺便说一句,客户端串数据,当收到这个数据,因为它发送,parsing它正确。

你需要知道,通过TCP套接字传递的唯一的东西是两端的缓冲区。

因此,如果一端发送JSON编码的数据,另一端则得到一个缓冲区,为了parsingJSON数据,您只需执行此操作

JSON.parse(buffer.toString('utf8'))

发送数据的结束在写入套接字之前需要使用JSON.stringify

我解决了这个问题。

有1个具体的错误发生

 undefined:1 {"chat":"hey","nickname":"nick_name"} ^ SyntaxError: Unexpected token DEBUG: Program node app exited with code 8 

数据string末尾的意外标记,是一些不是白色空间的幽灵符号。 trim()不起作用,所以对最后的symbor工作进行子串处理。 这是AS3符号,所以我们必须保留它。 首先将这个符号保存在新variables中。 你从行中删除这个符号。 之后,你可以parsingstring。 与它一起工作。

当你完成它的工作,串化对象,然后添加幽灵符号结束,并通过套接字发送。 没有这个符号,AS3不会parsing数据。

我不知道这是为什么,但这对我有用。

ValRus是正确的; 你需要子string(0,str.length-1)来删除最后一个字符。

  let str = reading.toString('utf8'); console.log( "String = %s", str ); let obj = JSON.parse( str.substring(0, str.length-1) ); let str2 = JSON.stringify(obj, null, 4); // Reverse conversion console.log("Obj = %s", str2); // and output to inspect 

这是我需要将JSON从MQTT消息缓冲区中取出的代码。

(如果在Java或C中进行debugging,这将会变得更加容易 – 好主是Javascript是一种痛苦!)