Javascript JSON未正确序列化。。。我想?
我有一个Node.js项目,它使用socket.io。在其中,我尝试将对象从客户端发送到服务器,如下所示:Javascript JSON未正确序列化。。。我想?,javascript,json,node.js,socket.io,Javascript,Json,Node.js,Socket.io,我有一个Node.js项目,它使用socket.io。在其中,我尝试将对象从客户端发送到服务器,如下所示: socket.send(JSON.stringify({'type':'msg','message':'test'})); 当它到达服务器时,我对其调用JSON.parse,并检查object.type=='msg'。当我运行代码并调用console.logobject.type时,它返回msg,但object.type=='msg'返回false。这是怎么回事 编辑: 代码中失败的相关
socket.send(JSON.stringify({'type':'msg','message':'test'}));
当它到达服务器时,我对其调用JSON.parse,并检查object.type=='msg'。当我运行代码并调用console.logobject.type时,它返回msg,但object.type=='msg'返回false。这是怎么回事
编辑:
代码中失败的相关部分是:
client.on('message', function(message, client){
var envelope = JSON.parse(message);
console.log(envelope.type);
if(envelope.type == "msg") { console.log("yay!"); }
}
无论何时收到消息,都会打印消息,但不会打印 您的邮件格式必须为“{type:msg}” 您的邮件格式必须为“{type:msg}” 您是否已经尝试在JSON消息中使用非文本作为键?我正在构建一个小型聊天服务器,使用JSON消息浏览socket.io。这是我的相关代码: 客户端:
var jsonMsg = {
action: 'SEND',
body: msg,
name: name.val()
};
socket.send(JSON.stringify(jsonMsg));
请注意,msg和name.val都是字符串值,从相应的输入字段中获取
服务器端:
client.on('message', function(m, c) {
// parse message
var msg = json.parse(m);
switch (msg.action) {
case 'SEND':
// send message to channel
var broadCast = {
posted: date.toReadableDate(new Date(), 'timestamp'),
message: msg.body,
name: msg.name
};
socket.broadcast(json.stringify(broadCast));
break;
}
});
注意:toReadableDate是一个自定义原型方法
该消息在服务器上正确接收,在客户端作为广播接收。您是否已经尝试在JSON消息中使用非文本作为键?我正在构建一个小型聊天服务器,使用JSON消息浏览socket.io。这是我的相关代码: 客户端:
var jsonMsg = {
action: 'SEND',
body: msg,
name: name.val()
};
socket.send(JSON.stringify(jsonMsg));
请注意,msg和name.val都是字符串值,从相应的输入字段中获取
服务器端:
client.on('message', function(m, c) {
// parse message
var msg = json.parse(m);
switch (msg.action) {
case 'SEND':
// send message to channel
var broadCast = {
posted: date.toReadableDate(new Date(), 'timestamp'),
message: msg.body,
name: msg.name
};
socket.broadcast(json.stringify(broadCast));
break;
}
});
注意:toReadableDate是一个自定义原型方法
该消息在服务器上正确接收,在客户端作为广播正确接收。可能是节点错误?我刚刚在0.5.0-pre中试用过,在有限的环境中效果很好
> message = JSON.stringify({'type':'msg','message':'test'})
'{"type":"msg","message":"test"}'
> var envelope = JSON.parse(message);
> console.log(envelope.type);
msg
> if(envelope.type == "msg") { console.log("yay!"); }
yay!
其他选项可能是编码问题看起来像终端上的msg,但严格来说不是字符串中的字符吗?可能是节点错误?我刚刚在0.5.0-pre中试用过,在有限的环境中效果很好
> message = JSON.stringify({'type':'msg','message':'test'})
'{"type":"msg","message":"test"}'
> var envelope = JSON.parse(message);
> console.log(envelope.type);
msg
> if(envelope.type == "msg") { console.log("yay!"); }
yay!
其他选项可能是编码问题,在终端上看起来像msg,但严格来说不是字符串中的字符吗?您能给我们看一些服务器代码吗?现在我想不出任何失败的原因。你说…它返回msg,…,它不应该返回一个带有msg的对象吗?尝试注入console.logmessage;作为函数的第一行。另外,检查typeof envelope.type,如果它没有读取字符串,那么这将解释为什么比较失败。@Martin He使用==所以类型在这里并不重要,我怀疑的是节点吞没了第二个日志调用,我过去有过这样的问题。@Ivo问题是第二个console.log调用之后的代码也没有被调用,和其他双日志以前也有过。你能给我们看看你的服务器代码吗?现在我想不出任何失败的原因。你说…它返回msg,…,它不应该返回一个带有msg的对象吗?尝试注入console.logmessage;作为函数的第一行。另外,检查typeof envelope.type,如果它没有读取字符串,那么这将解释为什么比较失败。@Martin He使用==所以类型在这里并不重要,我怀疑的是节点吞没了第二个日志调用,我过去有过这样的问题。@Ivo问题是第二个console.log调用之后的代码也没有被调用,和其他双日志以前也有过。这不会有什么区别,密钥是由客户端解析的,因此它们是否正确编码也不会有什么区别。您使用的是哪个json序列化库?我的示例使用,可能这就是双方的caveat.V8。使用单独的JSON库效率低下。您是否尝试过在两端使用json2.js?除了一些空字符外,我看不到任何其他问题的来源,但这应该不会发生。这不会有什么区别,密钥是由客户端解析的,因此它们是否正确编码也不会有什么区别。您使用的是哪个json序列化库?我的示例使用,可能这就是双方的caveat.V8。使用单独的JSON库效率低下。您是否尝试过在两端使用json2.js?我看不到你的问题的任何其他来源,除了一些空字符,但这真的不应该发生。