JSON.parse(dt)根本不起作用,给出它可以想象的所有错误

时间:2014-03-02 20:31:41

标签: json node.js actionscript-3

我在服务器端(nodejs)有这个代码:

socket.on('data', function(dt){
    var rdata = dt;
    var msg = JSON.parse(rdata);
    broadcast(msg);
}); 

我也尝试过这种方式:var msg = JSON.parse(dt);

dt得到:

{"chat":"hey","nickname":"nick_name"}    OR 
'{"chat":"hey","nickname":"nick_name"}'

此外,我在客户端(AS3)有这个,尝试了两个:

var msg = JSON.stringify({nickname: nname.text, chat: input_txt.text});   OR
var msg = "'" + JSON.stringify({nickname: nname.text, chat: input_txt.text}) + "'";

这就是控制台给出的:

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

同样在其他一些情况下,它会提供各种信息。

根本不知道发生了什么。 BTW,也试过JSONStream,仍然无法正常工作。

2 个答案:

答案 0 :(得分:0)

你正在使用什么样的插座?如果您使用的是websocket,则可能已经收到了一个对象作为响应(我认为大多数框架都是这样做的)。如果您使用的是plain net.socket,则可能会收到缓冲区或块中的数据,而不是一次性收到。对于这种情况,这似乎是一个合适的解决方法:

var buffer;
socket.setEncoding('utf8');
socket.on('data', function(data) {
    buffer += data;
});
socket.on('end', function() {
    var object = JSON.parse(buffer);
});

答案 1 :(得分:0)

数据字符串末尾的意外标记是一些不是空格的重影符号。 trim()不起作用,因此要将最后一个symbor子串。这是AS3符号,所以我们必须保留它。首先,将此符号保存在新变量中。你从线上擦掉这个符号。之后,您可以解析字符串。与之合作。

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

当您使用它完成后,将对象字符串化,然后将鬼符号添加到末尾并通过套接字发送。如果没有此符号,AS3将不会解析数据。

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